最近,我将验收测试从capybara-webkit切换到了无头Chrome。在某些情况下,我需要检查警报消息(例如,确认在用户离开页面时放弃更改)。使用capybara-webkit,我可以通过以下方式完成
confirm_messages = page.driver.browser.confirm_messages
expect(confirm_messages.first).to include "Do you want to discard your changes?"
# or
expect(page.driver.browser.confirm_messages).to be_empty
现在,当我尝试获取带有chrome / headless chrome的确认消息时,出现以下错误:
undefined method `confirm_messages' for #<Selenium::WebDriver::Chrome::Driver:0x007fa5478d8a08> (NoMethodError)
如何使用水豚和无头铬测试警报?
答案 0 :(得分:1)
您需要使用Capybaras模态处理方法(text
/ accept_confirm
/ etc)的accept_alert
参数-https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session#accept_confirm-instance_method-在接受/之前会检查消息/取消系统模态
accept_confirm "Do you want to discard your changes?" do
# whatever action triggers the modal to be shown
click_link("Go somewhere else")
end
从技术上讲accept_confirm
还会返回框的文本,因此您可以执行类似的操作
msg = accept_confirm do
# action which triggers modal to be shown
end
expect(msg).to eq "Do you want to discard your changes?"
尽管如果您确切地知道消息的文本,则第一个示例的阅读效果更好。请注意,这也可以与capybara-webkit一起使用,而无需使用特定于驱动程序的方法。