我的HTML看起来基本如下:
...
<a class="btnX btnSelectedBG" href="#"><span>Sign in</span></a>
...
Selenium中的以下xpath无法找到元素:
//a[contains(text(), 'Sign in') and contains(@class,'btnX')]
Selenium中的以下xpath成功,但对我来说还不够具体。
//a[contains(text(), 'Sign in')]
//a[contains(@class, 'btnX')]
为什么xpath无法找到元素,我该怎么做才能让它工作?
答案 0 :(得分:15)
匹配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>
答案 1 :(得分:5)
// a [contains(@ class,'btnX')和span [text()='登录']]不是一个好主意,因为你要搜索每个锚点的DOM,然后尝试与您的搜索条件相符。
理想情况下,您希望将XPath键入具有ID的第一个上升元素,然后按照树的方式工作。
e.g。如果您的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()的快捷方式和第二组[]作为和的快捷方式
答案 2 :(得分:0)
Yaaa对我来说。我认为这是最好的答案,但对其他解决方案持开放态度!
//a[contains(@class,'btnX') and span[text()='Sign in']]