我正在使用watir-webdriver来驱动Web应用程序的测试运行。
有问题的页面通过确认响应输入更改,然后是页面流失,然后是警报。
**更新**
我尝试过以下操作但是我从确认块开始Selenium::WebDriver::Error::UnhandledAlertError
。
require "watir-webdriver/extensions/alerts"
b.alert do
b.confirm(true) do
b.checkbox(:index => 1).set
end
end
** END UPDATE **
但是添加以下内容(输入更改后):
browser.driver.switch_to.alert.accept
将解雇第一个确认没问题...
不幸的是,由于页面流失尝试使用相同的行来解除以下警报,因此会引发
Selenium::WebDriver::Error::NoAlertPresentError
因为警报尚未发生。
我的解决方法是将以下方法添加到Watir :: Browser
def get_alert (timeout = 300)
Watir::Wait.until(timeout) {
begin
driver.switch_to.alert
rescue Selenium::WebDriver::Error::NoAlertPresentError
end
}
end
并通过
运行所有警报处理browser.get_alert
有没有更好/内置的方式来做到这一点?
**更新**
我的解决方法的一个好处是它允许我在程序上处理警报,而不是在b.alert / b.confirm中更难读取(或生成)块
** END UPDATE **
提前致谢, 阿瑟
答案 0 :(得分:2)
根据watir-webdriver网站上的dialogs页面 - >
require "watir-webdriver/extensions/alerts"
browser.confirm(true) do
browser.button(:value => 'Confirm').click
end #=> 'the confirm message'
因此,在您的具体情况下,您应该可以调用上述内容,而不是致电browser.driver.switch_to.alert.accept
或browser.get_alert
。
希望这有帮助。
答案 1 :(得分:0)
很难知道这是否可以在没有访问您的网页的情况下进行尝试,但您是否考虑尝试这样的事情?
require "watir-webdriver/extensions/alerts"
b.alert do
b.checkbox(:index => 1).set
browser.driver.switch_to.alert.accept
#possibly a wait here...
end
答案 2 :(得分:0)
较新的Alerts API具有标准等待方法,因此您现在可以执行以下操作:
browser.alert.when_present.ok