微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

解决方法

在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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐