Java Watir一个接一个地处理多个弹出窗口

Java Watir一个接一个地处理多个弹出窗口,java,internet-explorer,popup,alert,watir,Java,Internet Explorer,Popup,Alert,Watir,我有一个场景,点击一个按钮,屏幕上会出现第一个弹出窗口,其中有一个ok和一个cancel按钮。单击第一个弹出窗口的ok按钮时,第二个弹出窗口显示ok和cancel按钮 这里的问题是我不能点击第二个弹出窗口的ok按钮 用于单击的代码如下所示。成功单击第一个弹出的“确定”按钮 browser.button(:text, "Try it").click_no_wait browser.alert.ok #here first alert ok button is clicked 如果再次使用bro

我有一个场景,点击一个按钮,屏幕上会出现第一个弹出窗口,其中有一个ok和一个cancel按钮。单击第一个弹出窗口的ok按钮时,第二个弹出窗口显示ok和cancel按钮

这里的问题是我不能点击第二个弹出窗口的ok按钮

用于单击的代码如下所示。成功单击第一个弹出的“确定”按钮

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
时,它将单击该按钮,然后调用
等待,直到\u not \u存在

def wait_until_not_exists
  Wait.until(3) {!exists?}
  @container.page_container.wait
end 
此方法等待警报消失,然后浏览器完成加载

经过一些测试后,等待浏览器完成加载似乎并没有考虑显示的警报。该警报阻止Watir相信页面已加载,因此最终将超时

解决方法

最好的解决方案可能是如何更新Browser#wait方法。然而,我不确定要改变什么或其影响

另一种方法是只使用monkey补丁wait_unt_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

添加有关您使用的技术的标签。这项工作正在进行。感谢您的回复-Deepika