我想在Selenium中找到包含XPath的元素,其中包含两个可能的情况。这里有:
.//li/a[contains(., 'blah')]
.//li/a/span[contains(., 'blah')]
如何使用单个XPath覆盖这两个案例?
第二个问题,如果可能,我希望得到结果指向a
元素的指针,而不是两种情况下的span
。
此外,是否有一般方法返回匹配元素的匹配父项,而不是?
答案 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;)]