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

时间:2014-02-21 16:13:53

标签: html css xpath selenium-webdriver

如何使用xpath找到option1?

注意:每次构建后都会生成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 个答案:

答案 0 :(得分:2)

您尝试的xpath失败,因为@class='itemL'与类属性完全匹配。

您可以执行类似于对文本所做的操作,并使用contains作为类属性:

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

请注意,这也会匹配类别为“startitemL”,“itemLend”等的li元素。如果您需要防止这种情况,那么您将需要使用以下其中一项来检查整个单词。< / p>

检查xpath 1.0中的整个单词:

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

检查xpath 2.0中的整个单词:

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

答案 1 :(得分:0)

如果您正在使用c#,可以使用lambda表达式检查此linq-esq库以生成xpath。

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

此xpath可以使用以下表达式表示:

      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')]

如果您喜欢使用相同的运算符,也可以使它更严格:

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

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