114

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

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

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

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

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

カピバラの正確なテキストを一致させる方法はありますか?

4

6 に答える 6

145

: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"
于 2012-12-14T19:01:09.530 に答える
61

使用しているgemのバージョンによって異なります

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

非推奨になる可能性があります。その場合、あなたは使用しなければならないでしょう

find('a', text: 'Berlin', match: :prefer_exact)
于 2015-04-23T19:06:13.463 に答える
15

あなたもそうすることができます:

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

それはCSSのために見つけるでしょう。

exact: trueまた、代わりにのみを使用exact_textすると、そのexactオプションがXPATHに対してのみ有効であるというメッセージが表示されます。

于 2020-03-02T15:43:58.320 に答える
7

カピバラの正確なオプションを使用してください:

Capybara.exact = true
于 2014-01-31T18:03:39.693 に答える
5

私の好みはhave_selectorwithtextとを使用することですexact_text: true

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
于 2019-06-13T15:31:54.477 に答える
0

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

click_link(link_name, :text => link_name)

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

于 2018-12-13T05:48:42.040 に答える