java - Watir 接连处理多个弹出窗口

标签 java internet-explorer popup alert watir

我有一个场景,其中单击一个按钮后,屏幕上会出现第一个弹出窗口,其中包含“确定”和“取消”按钮。单击第一个弹出窗口的“确定”按钮后,将出现第二个弹出窗口,其中包含“确定”和“取消”按钮。

这里的问题是我无法单击第二个弹出窗口的“确定”按钮。

用于点击的代码如下。第一个弹出的确定按钮点击成功。

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

这里我们将等待方法更改为仅在没有其他警报存在的情况下等待页面加载。

使用此补丁,您单击两个警报的代码应该可以工作:

browser.alert.ok    
browser.alert.ok

关于java - Watir 接连处理多个弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924765/

相关文章:

javascript - 表单提交期间的 php 确认消息

java - SQL 数据库 Columns 错误,或者不存在?

java - 如何在不 sleep 或询问用户的情况下明确确认用户已授权 Dropbox 应用程序?

java - 点击计数器 Java GUI

php - 在 PHP 中定位特定版本的 Internet Explorer

javascript - 如何在页面加载时加载此 jquery 通知栏而不是单击按钮?

java - JPA获取实体对象的id

javascript - HTML5 for IE6.0

internet-explorer - @font-face ie8 上的文字 block 状 - 实例

ajax - 你能在 ajax 响应事件上做一个 jquery 移动弹出窗口吗?