Capybara似乎没有等待(因为它应该做!?)(Async ajax事件)

Ben*_*Ben 5 rspec capybara

我们有一个后台进程,当处理(从另一个服务器,UNIX进程)完成时,我们轮询并重新加载图表.

我不能让Capybrara正确等待(尽管普遍认为应该这样做)

它是一个AJAX事件,它轮询数据库,然后在完成后刷新页面内容.时间,即使是测试,也是多种多样的 - sleep n.seconds有时可行,但并非总是如此.

  • 我已经试过expect(page.has_content),assert page.has_text,find,和has_content.似乎没有人真正等待.
  • 我将超时设置为90秒.通常后台进程超过20秒.
  • 我尝试过不同的 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)

She*_*ter 5

在您的中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)

您不需要注册或重新注册驱动程序.