5

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

我不能让 Capybrara 适当地等待(尽管普遍认为它应该)

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

  • 我试过expect(page.has_content), assert page.has_text,findhas_content. 似乎没有人真正等待。
  • 我将超时设置为 90 秒。一般后台进程在20秒以上。
  • 我尝试过不同的default_wait_time

我发现很多文章声称它应该在默认轮询/超时内等待。有什么我们应该检查的吗?请注意,我们通过 Poltergeist 是无头的。

显示器上没有改变 CSS 对象,它只是一个字符串(这是从 a 中获取的,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)
4

2 回答 2

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 文档建议在您的spec_helper:

require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist

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

于 2013-11-14T02:17:06.793 回答
0

Gabe Berke-Williams 写了一篇关于此的文章 :) 您可以编写自己的助手让 Capyabara 等待 ajax 请参阅http://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara

于 2014-10-31T14:54:46.550 回答