ruby - 防止 ruby​​ selenium-webdriver 在引发 UnhandledAlertError 时解除警报

标签 ruby selenium webdriver

查看 ruby​​ selenium-webdriver 的更改日志,我在 2.18.0 下找到了这一行:

  • Firefox 和 IE:
    • 如果在操作期间出现警报,则引发 UnhandledAlertError。未处理的警报也被解除以减少重复异常。

在我看来,这是一个可怕的变化。我喜欢这个异常(exception),但任何未处理的确认都会被驳回(返回 false)。 我非常希望能够挽救异常并自己处理确认。

不幸的是,我无法在 selenium-webdriver gem 中找到代码,因此我可以覆盖此部分并删除 dismiss alert 命令。

有什么办法解决这个问题(除了恢复我的版本)?

提前致谢

亚瑟

最佳答案

我不是 100% 确定这就是您所追求的,但也许我会提供帮助。我理解你的问题的方式是你想“强制”拯救未处理的警报。

当由于超时而使用诸如查找元素函数之类的断言时,我正在使用以下代码重复搜索元素。

!20.times { break if (selenium.is_visible(driver.find_element(:id, 'loginid')) rescue false ) ; sleep 1 }

上面的代码将循环 20 次(每次等待 1 秒)以尝试找到元素并在找到时中断。请注意,我还没有拯救它,因为将它放在开始/结束之间会更稳健。像这样的……:

    begin           
!20.times { break if (selenium.is_visible(driver.find_element(:id, 'loginid')) rescue false ) ; sleep 1 }

[your executing code here]      .
      .
      .
usr = driver.find_element(:id, 'loginid').click         
usr = driver.find_element(:id, 'loginid').send_keys(username)
      .
      .
rescue
      .
      .
[your rescure code here]
      .
      .

puts "____________________________________________________________________"
puts "*** FATAL ERROR --> located at login area (username/password) ***"
puts "Possible reasons for this error..:"
puts "Invalid credentials * Cannot locate element id * "
puts "____________________________________________________________________"
     .
end

希望对您有所帮助!

关于ruby - 防止 ruby​​ selenium-webdriver 在引发 UnhandledAlertError 时解除警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804429/

相关文章:

ruby - 如何使用 Ruby 对给定时间段内在给定 TLD 中注册的所有域执行 WHOIS 查询?

java - 如何使用 Selenium 获取 Chrome 浏览器控制台日志 [INFO] 条目

java - 使用 selenium WebDriver 查找元素

java - 如何使用 Selenium Webdriver - Java 查找网页上存在的复选框总数?

python - 在 fedora 上安装 python selenium 绑定(bind)时出错

ruby-on-rails - 如何覆盖 ruby​​ 中的 [] 括号?

mysql - 连接多个模型的 Rails 数据建模

ruby-on-rails - 如何在 Controller 中使用方法 'truncate'?

java - 在表中查找元素 - selenium

python - Selenium webdriver 无需制作 pc 服务器