web-dev-qa-db-ja.com

リンクテキストを使用してリンクのxpathを検索しますか?

Selenium WebDriverで、リンクテキストを使用して以下のHTMLにxpathを使用する方法(「新し​​いボタンを追加」)

<a href="SOME URL">
 <span >
  <i class=""/>
 </span>Add New Button
</a>

私は以下のように要素を検査しようとしましたが、すべての問題は機能しました

1) //a[text()='Add New Button']
2) //a[contains(text(),'Add New Button']
3) //a/span/i[text()='Add New Button']
4) //a/span/i[contains(text(),'Add New Button']

3と4はそうでないことを知っていますが、試してみました。

したがって、そのようなHTML DOMの場合、xpathを使用してリンクテキストを使用してリンクを見つける方法は?

3
user2416212

すでに機能している回答の一部は機能しませんが、機能しないものもあります。そして、OPはより多くの説明から利益を得ると思います。

あなたの元の表現:

_//a[text()='Add New Button']
_

「Add New Button」を含むテキストノードの末尾にも改行文字があるため、機能しません。

次のもの:

_//a[contains(text(),'Add New Button']
_

text()はノードのsequenceを返し、contains()のような関数はfirstシーケンス内のノード。この場合、a内の最初のテキストノードには空白のみが含まれ、notは「新しいボタンの追加」を含むノードです。

この主張は次の方法で検証できます。

_//a[contains(text()[2],'Add New Button')]
_

これは、aの-​​secondテキストノードに「Add New Button」が含まれているかどうかをテストします。この式はa要素を返します。しかし、この場合の最善の解決策は次のとおりです。

_//a[contains(.,'Add New Button')]
_

_._は、要素のいわゆる「文字列値」、つまり「新しいボタンの追加」を含むすべてのテキストノードの連結に評価されます。


normalize-space()を使用したソリューションも可能ですが、ネストされた述語があります。

_//a[text()[normalize-space(.) = "Add New Button"]]
_
4
Mathias Müller

xpathを使用すると、要素に次のステートメントのテキストが含まれているかどうかを確認できます

//a[contains(., 'Button')]
1
lordkain

リンクテキストには、メインテキストの右側から不要なスペースが含まれているため、それらを取り除くために以下を実行する必要があります。

'//a[normalize-space(.)="Add New Button"]'
1
Andersson

次のxpathを使用します

 //*[contains(text(),'Add New Button')]

または

//a/i[contains(text(),'Add New Button')]

または

//a[@href='SOME URL']/i

またはcssSelectorを使用-

a[href='SOME URL']>i
0
NarendraR