我们有一个后台进程,当处理(从另一个服务器,UNIX进程)完成时,我们轮询并重新加载图表.
我不能让Capybrara正确等待(尽管普遍认为应该这样做)
它是一个AJAX事件,它轮询数据库,然后在完成后刷新页面内容.时间,即使是测试,也是多种多样的 - sleep n.seconds有时可行,但并非总是如此.
expect(page.has_content),assert page.has_text,find,和has_content.似乎没有人真正等待.default_wait_time我发现很多文章声称它应该在默认的轮询/超时内等待.我们应该检查一下吗?请注意,我们通过Poltergeist无头.
在显示器上没有更改的CSS对象,它只是一个字符串(这是从a调用puts page.html测试)
由此
<div class="bill-summary-strap-line">
Calculating your bill costs
<br/>
</div>
Run Code Online (Sandbox Code Playgroud)
对此
<div class="bill-summary-strap-line">
Calculating finished
<br/>
</div>
Run Code Online (Sandbox Code Playgroud)
我们缺少什么?
下面的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)
Run Code Online (Sandbox Code Playgroud)
在您的中spec_helper,您有以下代码:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {debug: false, :default_wait_time => 30, :timeout => 90})
end
Run Code Online (Sandbox Code Playgroud)
我的猜测是这个超时基本上被忽略了,因为Capybara本身会根据这个来设置超时Capybara.default_wait_time.这可以解释为什么你的时间在规范内设置为2.
该骚灵文档建议只是在你使用这个spec_helper:
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Run Code Online (Sandbox Code Playgroud)
您不需要注册或重新注册驱动程序.
| 归档时间: |
|
| 查看次数: |
6505 次 |
| 最近记录: |