2014-02-21 34 views
1

如何使用xpath找到option1?如何使用XPath查找特定元素?

注意:id是在每次構建後生成的。

我想這並不起作用:

/li[@class='itemL' and contains(text(),'option1']) 

輸入HTML片段

<div id="list-1721" class="x-list x-list-floating x-layer x-boundlist-default" "> 
<div id="list-1721-listEl" class="x-list-list-ct" style="overflow: auto; height: auto;"> 
<ul> 
<li class="x-list-item itemL" role="option">option1</li> 
<li class="x-list-item itemL" role="option">option2</li> 
</ul> 
</div> 

回答

2

因爲@class='itemL'是做對階級屬性完全匹配您嘗試的XPath的失敗。

你可以做類似於您的文字做了什麼,並使用contains class屬性:

//li[contains(@class, 'itemL') and contains(text(), 'option1')] 

注意,這也將比賽裏元素,其中的類別是「startitemL」,「itemLend」等等。如果您需要防範這種情況,那麼您將需要使用以下任一項來檢查整個單詞。

檢查整個單詞XPath 1.0中:

//li[contains(concat(' ', @class, ' '), ' itemL ') and contains(text(), 'option1')] 

檢查整個單詞了XPath 2.0:

//li[tokenize(@class,'\s+')='itemL' and contains(text(), 'option1')] 
0

如果您使用的是C#,你可以檢查出使用生成的XPath這個LINQ的彼岸庫lambda表達式。

 var xpath = CreateXpath.Where(e => e.TargetElementName == "li" 
            && e.TargetElementText.Contains("option1") 
            && e.Attribute("class").Contains("itemL")); 

生成的XPath://li[contains(@class,'itemL') and contains(text(),'option1')]

您還可以使它更加嚴格,如果你喜歡使用等於運算符:

http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq

此XPath可以用下面的表達式來表示

  var xpath = CreateXpath.Where(e => e.TargetElementName == "li" 
             && e.TargetElementText == "option1" 
             && e.Attribute("class").Text == "itemL"); 

Generated xpath: //li[@class='option1' and text()='itemL']