2

编写了一个步骤定义,在集合中使用 rspec 检查 CSS 元素。如果一个期望失败了整个场景炸弹,我什至没有得到关于每个 CSS 元素是否存在的独特反馈(不幸的是,要么全有,要么全无!我不想要那个)

我有以下代码:

Then(/^I should see the following css selectors:$/) do |table|
  css_selectors = table.raw
  css_selectors.each do |selector|
    browser.element(:css=>selector.to_s).exists?.should be_true
  end
end

如果我测试一大堆元素,即:

Then I should see the following css selectors:
  |input#foo|
  |.bar     |
  |h#baz    |
  |span.batz|

如果任何元素不存在,我会遇到问题。帮助!

4

2 回答 2

1

您可以向包含失败选择器的失败添加自定义消息。这是通过将第二个参数传递给should方法来完成的:

Then(/^I should see the following css selectors:$/) do |table|
  css_selectors = table.raw
  css_selectors.each do |selector|
    css_selector = selector[0].to_s
    browser.element(:css=>css_selector).exists?.should be_true, "Element not found: #{css_selector}"
  end
end

这将给出如下错误消息:

Element not found: input#foo (RSpec::Expectations::ExpectationNotMetError)

如果您还想确保所有选择器都运行,则必须运行每个选择器,收集结果并对结果组执行断言。

Then(/^I should see the following css selectors:$/) do |table|
  css_selectors = table.raw

  # Collect any failed selectors
  failed_selectors = []
  css_selectors.each do |selector|
    css_selector = selector[0].to_s
    failed_selectors << css_selector unless browser.element(:css=>css_selector).exists?
  end

  # Check that none of the selectors failed
  failed_selectors.should be_empty, "The following elements were not found #{failed_selectors.join(', ')}"
end
于 2013-07-29T20:08:02.500 回答
0

你能不叫fail剧本吗?

请参阅:如何强制黄瓜方案失败?

于 2013-07-29T19:32:24.250 回答