web-dev-qa-db-ja.com

カピバラの要素の正確なテキストと一致して要素を見つける方法

HTMLには次の2つの要素があります

<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>

次のカピバラ法を使用して要素を見つけようとしています

find("a", :text => "berlin")

両方にテキストベルリンが含まれているため、上記は2つの要素を返します。

カピバラで正確なテキストに一致する方法はありますか?

93
amjad

Capybaraの正確なオプション を使用するだけです:

Capybara.exact = true
4
John W

:textキーの値に文字列の代わりに正規表現を使用します。

find("a", :text => /\ABerlin\z/)

Method: Capybara::Node::Finders#alldocumentation の「Options Hash」セクションをご覧ください。

PS:テキストの一致では大文字と小文字が区別されます。サンプルコードでは、実際にエラーが発生します。

find("a", :text => "berlin")
# => Capybara::ElementNotFound:
#    Unable to find css "a" with text "berlin"
132
pje

使用しているgemのバージョンに応じて

find('a', text: 'Berlin', exact: true)

廃止される可能性があります。その場合は、使用する必要があります

find('a', text: 'Berlin', match: :prefer_exact)
48
Gabriel Pumple

Capybaraでclick_linkを使用するには、それを使用するメソッドにもう1つのプロパティを追加する必要があります。

click_link(link_name, :text => link_name)

ここで、link_nameはリンクのテキスト値です。 :textキーワードを使用して、要件に完全に一致するテキスト値を持つリンクをクリックすることを指定しています。

私の好みは、have_selectortextおよびexact_text: trueを使用することです。

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
0