如何使用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>
答案 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']