查看 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/