私のウェブページにdiv
は、class
という名前のがありTest
ます。
どうすれば見つけられXPath
ますか?
私のウェブページにdiv
は、class
という名前のがありTest
ます。
どうすれば見つけられXPath
ますか?
回答:
このセレクターは機能するはずですが、適切なマークアップに置き換えるとより効率的になります。
//*[contains(@class, 'Test')]
または、求められている要素がdiv
:
//div[contains(@class, 'Test')]
しかし、以来、これもような場合に一致しますclass="Testvalue"
かclass="newTest"
コメントで提供Tomalakのバージョンである@、よりよいです:
//div[contains(concat(' ', @class, ' '), ' Test ')]
正しく一致することを本当に確実にしたい場合は、normalize-space関数を使用して、クラス名の周りの浮遊空白文字をクリーンアップすることもできます(@Terryで言及)。
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
これらのすべてのバージョンで、ドキュメント内のすべての要素で特定の条件を検索する場合を除き、*は実際に一致させたい要素名に置き換えるのが最善です。
//div[contains(concat(' ', @class, ' '), ' Test ')]
-あなたの部分一致も表示されます。
最も簡単な方法。
//div[@class="Test"]
<div class="Test">
説明どおりに検索したいとします。
//
それだけではなく使用するためです/
。
ONLYのXPathでそれを行うための正しい方法:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
この関数は、normalize-space
先頭と末尾の空白を取り除き、空白文字のシーケンスを単一の空白で置き換えます。
これらのXpathクエリの多くが必要ない場合は、CSSセレクターは通常、XPathクエリよりも読み取りと書き込みの両方がはるかに簡単なので、CSSセレクターをXPathに変換するライブラリを使用することができます。たとえば、この場合、との両方div[class~="Test"]
を使用しdiv.Test
て同じ結果を得ることができます。
私が見つけることができたいくつかのライブラリ:
Tomalakがmederの回答へのコメントとしてずっと前に提供したように、私はこれを回答として提供しているだけです
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
、あらゆる種類の空白文字も考慮に入れてどうですか?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
子供を選ばないのですか?
この例のような要素を見つけることができます(すべてのcss要素)
private By
allElementsCss = By.xpath(".//div[@class]");