2017-02-15 30 views
2

我想在Selenium中查找包含文本的XPath元素,但有兩種可能的情況。這裏有:使用單個XPath覆蓋兩種情況?

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

如何用單個XPath覆蓋兩種情況?

第二個問題如果可能我希望得到結果指針a元素,而不是span在這兩種情況下。

此外,是否有一種通用的方式來返回匹配元素的匹配父項,而不是?

+2

不是第一個XPath的'./。li/a [包含(。,'blah')]'涵蓋了這兩種情況嗎? –

回答

4

一般情況下,的XPath表達式可以與|組合(如:xpath1 | xpath2),但是你並不需要在這種情況下,這樣做...

由於喬希克羅齊爾在評論中問,是的,.//li/a[contains(., 'blah')]涵蓋了這兩種情況。

字符串值a必須包含"blah",如果它的任何後代span元素的字符串值包含"blah"

第二個問題,如果可能,我希望得到儘可能結果指向一個 元素,而不是在這兩種情況下的跨度。

.//li/a[contains(., 'blah')]將返回這樣的a元素。

注意,它也將返回這樣a元素

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

PS> BTW是有返回的 匹配元素的匹配父一般的方式,而不是?

好,追加/..到一個XPath將返回母,但我懷疑你會從學習XML元素的字符串值中受益。請參閱Testing text() nodes vs string values in XPath

-1

你可以嘗試這樣的事情 .// LI/* [包含(。,「胡說」)]

2

您應該測試我給你,以確保它不會返回更多的XPath比你想要的比賽,但我只是用://a[contains(.,'blah')]