水豚的方法,wait_until似乎不适用于水豚-webkit。有没有其他的解决方案,或者Javascript的实现?
我有意需要一些sleep的替代品,例如sleep 2。

发布于 2014-08-11 00:17:30
如果您的AJAX调用导致DOM更改,Capybara将等待您这样做
page.should have_selector?("some selector")它是一个故意的Capybara特性,它等待(直到Capybara.default_wait_time) have_selector?和相关方法为真。
如果AJAX调用没有导致DOM更改,就无法使用Capybara在浏览器端等待更改。您也许能够在Javascript中检测到AJAX调用何时完成,并以某种方式将其传递给Capybara,但这将使您的测试和实现紧密耦合。在这种情况下,一种常见的方法是等待AJAX调用的服务器端效果(创建、更新或删除模型对象、发送电子邮件等)。发生的事情。由于Capybara看不到服务器端,您必须自己等待服务器端的更改。
在Capybara1中,您可以使用Capybara的wait_until等待服务器端的更改。wait_until已从Capybara2中删除。我在my answer中向Why does adding "sleep 1" in an after hook cause this Rspec/Capybara test to pass?发布了wait_until的实现
发布于 2015-05-05 22:39:33
可能是这样的:
# AJAX BEGIN
expect(page).to have_selector('form#new_user_video .submit > .throbber')
expect(page).to_not have_selector('form#new_user_video .submit > .throbber')
# AJAX END在js代码中手动设置'ajax:send‘(追加throbber)和'ajax:success’(删除throbber)。这样,您将能够知道请求何时完成。
并且您应该为ajax设置足够的时间来完成:
Capybara.default_max_wait_time = 5发布于 2020-11-19 10:55:51
我真的不需要期望,因为它不是我需要测试的东西。
这对我很有效:
page.has_css?('.my-selector')
# or
page.has_content?('Some text on the page')
# continue with testhttps://stackoverflow.com/questions/24649483
复制相似问题