黄瓜:等待ajax:成功

时间:2011-09-02 16:08:48

标签: ruby-on-rails cucumber

我在Rails 3.1项目中有以下典型的黄瓜步骤:

...
When I follow "Remove from cart"
Then I should see "Test Product removed from cart"

困难在于“从购物车中删除”按钮是一个ajax:远程调用,它通过以下方式将“从购物车中删除的测试产品”返回到#cart_notice元素:

$('#cart_notice').append("<%= @product.name %> removed from cart");

该功能在浏览器中正常工作,但未在黄瓜中找到“从购物车中删除测试产品”文本。我猜这是因为Cucumber在AJAX返回之前正在搜索文本?

因此,简而言之......在搜索所需内容之前,如何确保黄瓜等待ajax返回结果?

4 个答案:

答案 0 :(得分:16)

要添加到dexter所说的内容,您可能需要编写一个在浏览器中执行JS的步骤,该步骤等待ajax请求完成。使用jQuery,我使用这一步:

When /^I wait for the ajax request to finish$/ do
  start_time = Time.now
  page.evaluate_script('jQuery.isReady&&jQuery.active==0').class.should_not eql(String) until page.evaluate_script('jQuery.isReady&&jQuery.active==0') or (start_time + 5.seconds) < Time.now do
    sleep 1
  end
end

然后,您可以根据需要或在每个javascript步骤之后包含该步骤:

AfterStep('@javascript') do
  begin
    When 'I wait for the ajax request to finish'
  rescue
  end
end

我遇到了自动同步的问题,这清除了它。

答案 1 :(得分:0)

我猜你正在使用黄瓜和水豚。在这种情况下,水豚带有resynchronize功能。 "Capybara can block and wait for Ajax requests to finish after you’ve interacted with the page." - from capybara documentation

您可以在features/support/env.rb

中启用它
Capybara.register_driver :selenium do |app|
  Capybara::Driver::Selenium.new(app, :browser => browser.to_sym, :resynchronize => true) 
end

但是,我已经看到这导致超时问题。因此,如果这对您不起作用,我建议在断言ajax请求的结果之前引入手动等待步骤。

...
When I follow "Remove from cart"
And I wait for 5 seconds
Then I should see "Test Product removed from cart"

您可以将step_definitions/web_steps.rb中的等待步骤定义为

When /^I wait for (\d+) seconds?$/ do |secs|
  sleep secs.to_i
end

答案 2 :(得分:0)

我认为wait_until应该完成这项工作。它将命令capybara检查某些内容,直到它真实一段时间。

答案 3 :(得分:0)

老问题,但Spreewald宝石应该有所帮助 https://github.com/makandra/spreewald

您可以像Spreewald gem一样使用耐心的方法:

Then /^I should see "([^\"]*)" in the HTML$/ do |text|
  patiently do
    page.body.should include(text)
  end
end

该步骤将保持循环一段时间,直到所需文本出现在测试dom中,否则该步骤将失败。

(摘自https://makandracards.com/makandra/12139-waiting-for-page-loads-and-ajax-requests-to-finish-with-capybara

相关问题