web-dev-qa-db-ja.com

xpathとSeleniumを使用して要素を選択する

基本的に次のようなHTMLがあります。

...    
  <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a>
...

Seleniumの次のxpathは、elementを見つけることができません。

//a[contains(text(), 'Sign in') and contains(@class,'btnX')]

Seleniumの次のxpathは成功しますが、私にとって十分に具体的ではありません。

//a[contains(text(), 'Sign in')]
//a[contains(@class, 'btnX')]

Xpathが要素を見つけられないのはなぜですか?それを機能させるにはどうすればよいですか?

10
cgp

Sign inaの直接の子、または別の要素の子です。

 // a [contains(@ class、 'btnX')and .// text()= 'Sign in'] 

というのは

<a class="btnX btnSelectedBG" href="#">Sign in</a>

そして

<a class="btnX btnSelectedBG" href="#"><b>Sign in</b></a>

15
Emiliano Poggi

// a [contains(@ class、 'btnX')and span [text()= 'Sign in']]は、すべてのアンカーについてDOMを検索し、それを比較するため、お勧めできません。あなたの検索基準。

理想的には、IDを持つ最初のアセンダント要素にXPathをキー入力してから、ツリーを下に向かって作業します。

例えばあなたのhtmlが

<div id="foo">   
  <a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a>
</div>

あなたが使用することができます:

//div[@id='foo']/a[contains(@class, 'btnX')][span[.='Sign in']]

残念ながら、ページの残りの構造がわからないため、以下より具体的なものを提供することはできません。

//a[contains(@class, 'btnX')][span[.='Sign in']]

しかし、それは実際にはあまり良いxpathではありません。

(私のXPathは、text()のショートカットとして。を使用し、andのショートカットとして[]の2番目のセットを使用したため、少し異なって見えます)

5
Ardesco

私にとってはうん。これが最良の答えだと思いますが、他の解決策にもオープンです!

//a[contains(@class,'btnX') and span[text()='Sign in']]
0
cgp