8

スタック全体を Rails 3.0 ベースのプロジェクトから 3.1 にアップグレードしました。仕様には合格していますが、私の機能は少しうるさいです。私が現在抱えている問題は、このステップです:

Then /^I should see (\d+) menu item(?:s)? within "([^"]*)"$/ do |count, selector|
  page.find(:css, selector, :count => count.to_i)
end

機能自体には、次のように記述できます。

Then I should see 5 menu items within "tr#menu_item_row"

私が受け取るメッセージは次のとおりです。

Then I should see 5 menu items within "tr#menu_item_row"                                      # features/step_definitions/admin_menu_steps.rb:1
  Ambiguous match, found 5 elements matching css "tr#menu_item_row" (Capybara::Ambiguous)
  ./features/step_definitions/admin_menu_steps.rb:2:in `/^I should see (\d+) menu item(?:s)? within "([^"]*)"$/'
  features/admin_menu.feature:30:in `Then I should see 5 menu items within "tr#menu_item_row"'

私が知る限り、5 つの要素は実際に見つかった 5 つの要素と一致しています。このコードを間違って書いたのでしょうか、それとも大きな変更がありましたか? ありがとう!

4

2 に答える 2

2

はい、これはバージョン 1.x と 2.x の間の変更です。すべての変更点は、カピバラ アップグレード ガイドとこのブログ投稿で確認できます。

複数の要素が見つかった場合、このfindメソッドはエラーを発生させるようになりました。ambiguous matchいくつかの例しかない場合は、次のようなことができます

Then /^I should see (\d+) menu item(?:s)? within "([^"]*)"$/ do |count, selector|
  page.find(:css, selector, :count => count.to_i, match: prefer_exact)
end

または、このような例がたくさんある場合は、下位互換性のためにカピバラの構成を次のように変更できます。

Capybara.configure do |config|
  config.match = :prefer_exact
  config.ignore_hidden_elements = false
end

これを機能させるには、これを変更する必要があるかもしれませんが、これが一般的な考え方です。上記のリンクを参照してください。すべてそこにあります。これがあなたを正しい方向に導くことを願っています

于 2013-06-08T20:47:57.837 に答える