HTMLには次の2つの要素があります
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
次のカピバラ法を使用して要素を見つけようとしています
find("a", :text => "berlin")
両方にテキストベルリンが含まれているため、上記は2つの要素を返します。
カピバラで正確なテキストに一致する方法はありますか?
Capybaraの正確なオプション を使用するだけです:
Capybara.exact = true
:text
キーの値に文字列の代わりに正規表現を使用します。
find("a", :text => /\ABerlin\z/)
Method: Capybara::Node::Finders#all
documentation の「Options Hash」セクションをご覧ください。
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)
Capybaraでclick_linkを使用するには、それを使用するメソッドにもう1つのプロパティを追加する必要があります。
click_link(link_name, :text => link_name)
ここで、link_nameはリンクのテキスト値です。 :textキーワードを使用して、要件に完全に一致するテキスト値を持つリンクをクリックすることを指定しています。
私の好みは、have_selector
とtext
およびexact_text: true
を使用することです。
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true