Rspec 无法使用Capybara强制单击隐藏元素

Rspec 无法使用Capybara强制单击隐藏元素,rspec,capybara,poltergeist,Rspec,Capybara,Poltergeist,我的水豚试验中出现间歇性故障,原因是模式关闭不够快,因此覆盖了要单击的按钮。来自水豚的错误消息告诉我尝试node.triger'click'。当我使用下面的代码尝试此操作时 find_button('Update').trigger('click') 我得到这个错误: Failure/Error: find_button('Update').trigger('click') Capybara::NotSupportedByDriverError: Capybara::Driver:

我的水豚试验中出现间歇性故障,原因是模式关闭不够快,因此覆盖了要单击的按钮。来自水豚的错误消息告诉我尝试node.triger'click'。当我使用下面的代码尝试此操作时

find_button('Update').trigger('click')
我得到这个错误:

 Failure/Error: find_button('Update').trigger('click')

 Capybara::NotSupportedByDriverError:
   Capybara::Driver::Node#trigger    
我正在使用恶鬼驱动程序,例如在我的rails\u助手中

Capybara.javascript_driver = :poltergeist

发生了什么事?

就像有时发生的那样,我只是把问题写出来,就找到了答案。在特定的测试中,我没有设置js:true。在我收到原始错误消息的同一个文件中的另一个测试中,确实有js:true。一旦我在文件中的所有测试中设置了js:true,我确实收到了一致的错误消息,并且可以使用``.trigger'click.

就像有时发生的那样,只需写出问题,我就找到了答案。在特定的测试中,我没有设置js:true。在我收到原始错误消息的同一个文件中的另一个测试中,确实有js:true。一旦我在文件中的所有测试中设置了js:true,我确实收到了一致的错误消息,可以使用``.trigger'click.

当您需要完成请求或动画以便下一个测试工作时,一个可靠的策略是编写一个测试,使水豚等待通过。例如,如果单击“确定”按钮后,带有选择器.modal的模态消失,则可以编写如下测试:

click_button 'OK'
expect(page).not_to have_css '.modal'
click_button 'Update'

默认情况下,在测试失败之前,Capybara会等待动画和异步请求完成两秒钟。例如,可以使用Capybara.default\u max\u wait\u time=5将其更改为5。

当您需要完成请求或动画以使下一个测试工作时,一个可靠的策略是编写一个测试,使Capybara等待直到通过。例如,如果单击“确定”按钮后,带有选择器.modal的模态消失,则可以编写如下测试:

click_button 'OK'
expect(page).not_to have_css '.modal'
click_button 'Update'

默认情况下,在测试失败之前,Capybara会等待动画和异步请求完成两秒钟。例如,可以使用Capybara.default\u max\u wait\u time=5将其更改为5。

。触发器“单击”应该是最后的手段,因为它允许您执行用户永远无法执行的操作,从而否定了编写测试的整个要点。查看mroach的答案以获得正确的解决方案,但只需使用click而不是trigger。trigger'click'应该是最后的手段,因为它允许您做用户无法做的事情,这首先否定了编写测试的整个要点。查看mroach的答案以获得正确的解决方案,但仅使用单击而非触发此答案在应单击的最后一行代码之前是完美的,或单击按钮不触发“单击”此答案在应单击的最后一行代码之前是完美的,或单击按钮不触发“单击”