强制水豚因意外模式而失败

时间:2019-06-21 11:13:53

标签: modal-dialog capybara google-chrome-headless

我正在测试一些触发和验证JS警报的方法,

it 'triggers a modal' do
  accept_alert('Hello world') do
    visit '/'
    click_button 'Button'
  end
end

失败的原因:

 Capybara::ModalNotFound:
       Unable to find modal dialog with Hello world

无头运行时,我以为该对话框根本没有触发,这是我的JS代码的问题,但我注意到列出了测试日志:

* Listening on tcp://127.0.0.1:3001
Modal window has been opened, but you didn't wrap your code into (`accept_prompt` | `dismiss_prompt` | `accept_confirm` | `dismiss_confirm` | `accept_alert`), accepting by default
F

在完整的Chrome中运行时,我注意到该模式已被触发,并带有预期的消息。所以现在我不确定:

  • 如果消息实际上是错误的,为什么我的accept_alert没有通过测试(例如,包含隐藏字符并且消息实际上是Hello world\t。)
  • 由于我的accept块包裹了整个测试主体,因此如何展开模式?

我可能有一个愚蠢的语法错误,但是我认为以上是正确的,并且正在另一项测试上。为了尝试深入研究,我想禁用Capybara的“默认情况下接受”。

有什么方法可以

  1. 使任何意外的模式无法通过测试(而不是接受/关闭)吗?
  2. 注销模态文本吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,Capybara并没有接受,而是由您使用的驱动程序完成的(根据所生成的消息,我假设是Cuprite)。如果您包装导致模态出现的动作(基于显示的行为,我假设是visit)而不是整个测试,那么如果错误消息不正确,则会引发错误 因为accept_alert方法仅在模块完成期望后才期望模态

accept_alert('Hello world') do
  visit '/'
end
click_button 'Button'

自动接受(带有警告)意外警报的行为是由于其原始设计基于Poltergeist,并且我认为当前无法配置。