我们有一个后台进程,当处理(从另一台服务器,UNIX进程)完成时,我们轮询并重新加载图表。
我不能让Capybrara正确等待(尽管普遍认为应该这样做)
它是一个AJAX事件,它轮询数据库,然后在完成后刷新页面内容。时间,即使是测试,也是多种多样的 - sleep n.seconds
有时会起作用,但并非总是如此。
expect(page.has_content)
,assert page.has_text
,find
和has_content
。
似乎没有人真正等待。default_wait_time
我发现很多文章声称它应该在默认的轮询/超时内等待。我们应该检查一下吗?请注意,我们通过Poltergeist无头。
在显示器上没有更改的CSS对象,它只是一个字符串(这是从puts page.html
获取以调试测试)
从此
<div class="bill-summary-strap-line">
Calculating your bill costs
<br/>
</div>
到此
<div class="bill-summary-strap-line">
Calculating finished
<br/>
</div>
我们缺少什么?
下面的RSpec代码,真的希望有人有一些指导解决了这类问题。 干杯 本
puts page.html # test
#assert page.has_text?('Calculating your bill costs')
expect(page).to have_content 'Calculating your bill costs'
page.driver.render("#{LOGDIR}/output1.png", :full => true)
sleep 30.seconds # would like to remove this
puts page.html # test output
#page.should have_content("Calculating finished")
#expect(page.has_content? "Calculating finished").to be_true
assert page.has_text?("Calculating finished")
page.driver.render("#{LOGDIR}/output2.png", :full => true)
答案 0 :(得分:5)
在spec_helper
中,您有以下代码:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {debug: false, :default_wait_time => 30, :timeout => 90})
end
我的猜测是这个超时基本上被忽略了,因为Capybara本身会根据Capybara.default_wait_time
设置超时。这可以解释为什么你的时间在规范中设置为2。
poltergeist docs建议您在spec_helper
:
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
您不需要注册或重新注册驱动程序。
答案 1 :(得分:0)
Gabe Berke-Williams写了一篇关于:)的文章 你可以编写自己的助手让Capyabara等待ajax 见http://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara