我有一个应用程序需要我为元素找到XPath选择器,然后查看是否可以简化该XPath。
所以,如果我有
<a class="abc def gh">
我可以确定XPath
a[contains(@class, "abc")
足够具体。问题是,它还选择了带有&#34; abcxyz&#34;,
的项目有没有办法选择只有课程&#34; abc&#34;?
的项目即。我觉得它很清楚,但我想找到一类具有&#34; abc&#34;或&#34; abc def&#34;但不是&#34; abcxyz&#34;。
这是一个更具体的例子,因为我认为到目前为止这两个答案都不起作用:
<div>
<span id="x" class="btnSalePriceLabel">Sale:</span>
<span id="y" class="btnSalePrice highlight">$20.40</span>
</div>
我希望XPath选择器选择第二个跨度而不是第一个跨度。
如果我尝试
//span[@class and contains(concat(' ', normalize-space(@class), ' '), ' btnSalesPrice ')]
我没有选择任何东西。与
一样//span[contains(concat(' ', normalize-space(@class), ' '), ' btnSalesPrice ')]
答案 0 :(得分:1)
由于class
属性是多值属性,您必须account for these spaces between the values with concat()
:
//a[contains(concat(' ', normalize-space(@class), ' '), ' abc ')]
请注意, CSS选择器具有匹配内置特定类值的能力:
a.abc
我认为你可以看到更简洁和可读的内容。
答案 1 :(得分:1)
最好使用css
进行此完全匹配,特别是class
属性,在这种情况下,它会是:
a.abc
您可以在多种语言上使用不同的css-to-xpath转换器(请查看this one for example on javascript),其转换将是:
descendant-or-self::a[@class and contains(concat(' ', normalize-space(@class), ' '), ' abc ')]