基本的に次のような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が要素を見つけられないのはなぜですか?それを機能させるにはどうすればよいですか?
Sign in
はa
の直接の子、または別の要素の子です。
// 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>
// 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番目のセットを使用したため、少し異なって見えます)
私にとってはうん。これが最良の答えだと思いますが、他の解決策にもオープンです!
//a[contains(@class,'btnX') and span[text()='Sign in']]