HTMLで次の2つの要素があります
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
次のカピバラの方法を使って要素を見つけようとしています
find("a", :text => "berlin")
上記は2つの要素を返します。これは、両方にテキストベルリンが含まれているためです。
カピバラの正確なテキストを一致させる方法はありますか?
:text
キーの値には、文字列の代わりに正規表現を使用します。
find("a", :text => /\ABerlin\z/)
Method: Capybara::Node::Finders#all
ドキュメントの「オプションハッシュ」セクションを確認してください。
PS:テキストの一致では大文字と小文字が区別されます。サンプルコードは実際にエラーを発生させます:
find("a", :text => "berlin")
# => Capybara::ElementNotFound:
# Unable to find css "a" with text "berlin"
使用しているgemのバージョンによって異なります
find('a', text: 'Berlin', exact: true)
非推奨になる可能性があります。その場合、あなたは使用しなければならないでしょう
find('a', text: 'Berlin', match: :prefer_exact)
あなたもそうすることができます:
find('a', text: 'Berlin', exact_text: true)
それはCSSのために見つけるでしょう。
exact: true
また、代わりにのみを使用exact_text
すると、そのexact
オプションがXPATHに対してのみ有効であるというメッセージが表示されます。
カピバラの正確なオプションを使用してください:
Capybara.exact = true
私の好みはhave_selector
withtext
とを使用することですexact_text: true
:
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
capybaraでclick_linkを使用するには、それを使用するメソッドにもう1つのプロパティを追加する必要があります。
click_link(link_name, :text => link_name)
ここで、link_nameはリンクのテキスト値です。:textキーワードを使用して、要件に完全に一致するテキスト値を持つリンクをクリックすることを指定しています。