Sikuli如何用于等待按钮,直到它显示它然后单击它?

Posted

技术标签:

【中文标题】Sikuli如何用于等待按钮,直到它显示它然后单击它?【英文标题】:how can Sikuli be used for wait for the button untill it displayed it and then click on it? 【发布时间】:2012-12-15 15:42:04 【问题描述】:

我在网页上应用 sikuli 脚本,这样当页面加载时它会等待特定按钮出现时单击它,如果没有,它会等待一段时间,直到按钮出现在网页上..我做了以下脚本..它可以正常工作 2 或 3 个循环,但之后程序停止并出现 sikuli 窗口..这是我的代码。

当存在时(“img1.png”):

    click("img1.png")
    wait("img2",30*60)
    click("img2.png")
    click("window close button.png") // here it closes the 2nd popup tab after clicking on img2 then it return to its page

他在哪里等待 img1 按钮再次出现......所以 等待("img1.png",30*60) //此脚本在 3 -4 次迭代中成功运行,但随后停止并出现 sikuli 窗口且没有错误。感谢您的帮助

【问题讨论】:

【参考方案1】:

如果没有任何错误消息,就很难说出您的脚本为什么不起作用。但我最好的猜测是 while exists("img1.png") 返回 false 因为 img1.png 找不到。也许Sikuli找不到img1.png,因为页面还没有重新加载。尝试在while 语句的末尾添加wait(1)

或者尝试使用 Region 类的 onAppearobserve 方法:Region.observe()

【讨论】:

【参考方案2】:

等待("img2",30*60)

注意这里和wait("img2.png",30*60)不一样

此外,对于调试,请尝试find("img2.png"),当它出现在屏幕上时,它会将鼠标悬停在 img2.png 上。如果 img2.png 出现后鼠标没有悬停在它上面,可以使用similar() 命令降低搜索的准确性。

【讨论】:

【参考方案3】:

不确定您是否已经解决了问题。

像你这样的效果总是时间问题:由鼠标动作触发的事情要么发生得太快或太慢,所以下一个 Sikuli 脚本语句不会“看到”你的工作流程期望在屏幕上显示的内容。

所以正如上面 eostrows 已经提到的,如果脚本以静默方式结束并且没有错误消息,那么“while exists()”给出了一个 NotFound 条件并停止了循环,因为 img1 在之后的 3 秒内没有出现click("窗口关闭按钮.png"). 必须如此,因为循环内的所有其他操作要么正常工作,要么以 FindFailed 异常结束脚本。

您可以通过这种方式使工作流程更加健壮:

while exists("img1.png", 10): # wait max 10 secs
    click("img1.png")
    click(wait("img2.png",30*60)) # this saves one search for same image
    click("window close button.png")
else:
    print "img1 not seen after window close"

【讨论】:

以上是关于Sikuli如何用于等待按钮,直到它显示它然后单击它?的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮时如何使 VideoView 全屏显示?

Anylogic:如何让代理在队列中等待直到它改变状态? (离散事件流程图)

如何确保已选择单选按钮

JavaScript按钮开关

Vue.js - 将类添加到单击的按钮

Vue.js - 将类添加到单击的按钮