カピバラで要素の正確なテキストを照合して要素を見つける方法


102

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

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

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

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

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

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


カピバラかノコギリ?なぜ両方にタグ付けされているのですか?
pguardiario 2012

回答:



139

: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"

13
これが最良の答えであることは恐ろしいことです。:cry:
BM5k 2014年

なぜベルリン間に\ Aと\ zがあるのですか?
Karan Verma 2014年

1
正規表現にプレースホルダーを追加するにはどうすればよいですか
FluffyBeing

これは書面で処理された可能性がありますclick_link(link_text, :text => link_text)
なぜあなたが

52

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

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

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

find('a', text: 'Berlin', match: :prefer_exact)


4

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

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

それはCSSで見つかります。

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


2
またはそれ以上、使用できますfind("a", exact_text: "berlin")
Kukunin

0

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

click_link(link_name, :text => link_name)

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.