选择带有xpath和Selenium的元素

时间:2011-04-27 18:41:08

标签: selenium selenium-rc xpath

我的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无法找到元素,我该怎么做才能让它工作?

3 个答案:

答案 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']]