0

我用黄瓜和水。问题是参考下面的代码:

When(/^I click on all 'Show more'$/) do
  @browser.links(:class, "more-matches").each do |d|
     if d.text == "Show more"
      d.click
     end
  end
end

现在,当测试用例达到此步骤定义时,测试用例显示为通过,而无需单击使用@browser.links(:class, "more-matches") 捕获的所有链接。未实现特定代码可能是因为 ajax 调用尚未完成,并且数组包含零个元素并且没有循环。如果我"sleep 2"在此步骤定义的开头引入 a ,则代码有效。谁能告诉我如何通过添加代码来处理这种情况,以便完成 ajax 调用并且数组成功保存所有元素和循环。我也尝试添加代码:

if @browser.execute_script('return jQuery.active').to_i == 0

但它也没有奏效。请提出一种执行步骤定义并且由于空数组而不会通过的方法。

4

1 回答 1

1

使用元素#wait_until_present

通常,您会知道应该存在多少个链接。因此,您可以等到出现预期数量的链接。

When(/^I click on all 'Show more'$/) do
  # Wait for the expected number of links to appear
  #  (note that :index is zero-based, hence the minus 1)
  expected_number = 5
  @browser.link(:class => "more-matches", 
    :index => (expected_number-1)).wait_until_present

  # Click the links
  @browser.links(:class, "more-matches").each do |d|
    if d.text == "Show more"
      d.click
    end
  end
end

如果您不知道预期有多少链接,那么确保一致性会变得更加困难。但是,您可能只需检查是否存在至少一个链接即可。希望如果一个人在场,那么所有其他人都在场。

When(/^I click on all 'Show more'$/) do
  # Wait until at least one link appears
  @browser.link(:class => "more-matches").wait_until_present

  # Click the links
  @browser.links(:class, "more-matches").each do |d|
    if d.text == "Show more"
      d.click
    end
  end
end

使用浏览器#wait_until

另一种方法是使用wait_until. 等待至少 5 个链接可以重写为:

When(/^I click on all 'Show more'$/) do
  # Wait for the expected number of links to appear
  expected_number = 5
  @browser.wait_until do
    @browser.links(:class => "more-matches").length >= expected_number
  end

  # Click the links
  @browser.links(:class, "more-matches").each do |d|
    if d.text == "Show more"
      d.click
    end
  end
end
于 2013-11-12T14:53:24.977 回答