2

コレクションで rspec を使用して CSS 要素をチェックするステップ定義を作成しました。1 つの期待が失敗すると、シナリオ全体が爆破され、各 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これは、メソッドに 2 番目の引数を渡すことによって行われます。

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 に答える