2014-02-21 20 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']