用单个XPath覆盖两个案例?

时间:2017-02-15 18:30:10

标签: java html xml selenium xpath

我想在Selenium中找到包含XPath的元素,其中包含两个可能的情况。这里有:

.//li/a[contains(., 'blah')]
.//li/a/span[contains(., 'blah')]

如何使用单个XPath覆盖这两个案例?

第二个问题,如果可能,我希望得到结果指向a元素的指针,而不是两种情况下的span

此外,是否有一般方法返回匹配元素的匹配父项,而不是?

3 个答案:

答案 0 :(得分:4)

通常,XPath表达式可以与|结合使用(例如:xpath1 | xpath2),但是在这种情况下你真的不需要这样做......

正如Josh Crozier在评论中所说,是的,.//li/a[contains(., 'blah')]涵盖了这两种情况。

a的字符串值必须包含"blah",如果其后续span元素的字符串值包含"blah"

  

第二个问题,如果可能,我想得到结果指针   a元素,而不是两种情况下的跨度。

.//li/a[contains(., 'blah')]将返回此类a元素。

请注意,它还会将此类a元素作为

返回
 <a>xxxblah</a>
 <a><span>blah</span></a>
 <a><span>bl</span><span>ah</span></a>
  

PS&GT; BTW有一种通用的方式返回作为匹配父   相匹配的元素,而不是?

好吧,将/..附加到XPath将返回父级,但我怀疑您将从了解XML元素的字符串值中受益。见Testing text() nodes vs string values in XPath

答案 1 :(得分:2)

你应该测试我给你的xpath,确保它不会返回比你想要的更多的匹配,但我只是使用://a[contains(.,'blah')]

答案 2 :(得分:-1)

你可以尝试这样的事情 .// li / * [包含(。,&#39; blah&#39;)]