如何使用 capybara + headless chrome 测试 confirm/alert 消息

How to test confirm/alert messages with capybara + headless chrome

最近我将我的验收测试从 capybara-webkit 切换到了 headless 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)

如何测试水豚和无头警报 chrome?

你需要使用 Capybaras 模态处理方法的 text 参数 (accept_confirm/accept_alert/etc) -https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session#accept_confirm-instance_method - 这将检查它之前的消息accepts/dismisses系统模态

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 也 returns 框的文本,这样你就可以做类似

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,无需使用特定于驱动程序的方法。