我有一种情况,单击一个按钮后,屏幕上会出现一个带有确定和取消按钮的第一个弹出窗口。单击第一个弹出窗口的“确定”按钮时,第二个弹出窗口带有“确定”和“取消”按钮。
这里的问题是我无法单击第二个弹出窗口的“确定”按钮。
用于点击的代码如下。成功单击第一个弹出的确定按钮。
browser.button(:text, "Try it").click_no_wait
browser.alert.ok #here first alert ok button is clicked
如果我再次使用
browser.alert.ok
发出第二次警报,脚本将挂起 最佳答案
问题
问题似乎在于Watir-Classic如何处理等待警报消失的情况。当您执行browser.alert.ok
时,它将单击按钮,然后调用wait_until_not_exists
:
def wait_until_not_exists
Wait.until(3) {!exists?}
@container.page_container.wait
end
此方法等待警报消失,然后浏览器完成加载。
经过一些测试,看起来等待浏览器完成加载并不能说明正在显示的警报。该警报使Watir认为页面已加载,因此最终将超时。
解决方法
最好的解决方案可能是如何更新Browser#wait方法。但是,我不确定要更改哪些内容或含义。
另一种选择是只猴子修补wait_until_not_exists方法。该方法使用较少,因此可能降低风险。您可以在需要Watir-Classic时添加以下猴子补丁:
require 'watir-classic'
module Watir
class Alert
def wait_until_not_exists
Wait.until(3) {!exists?}
unless @container.page_container.alert.exists?
@container.page_container.wait
end
end
end
end
在这里,我们已更改了wait方法,使其仅在没有其他警报时才等待页面加载。
使用此修补程序,单击两个警报的代码应该可以工作:
browser.alert.ok
browser.alert.ok