[英]Finding WebElement by Xpath Using Regex
我有以下WebElement:
<input id="" type="checkbox" value="/p1/foobar1" name="checkbox1" partition="p1" onclick=""/>
<input id="" type="checkbox" value="/p1/foobar" name="checkbox2" partition="p1" onclick=""/>
<input id="" type="checkbox" value="/p2/foobar2" name="checkbox3" partition="p2" onclick=""/>
我想基于xpath中使用regex的value属性在上述源中找到第二个元素(值为/p1/foobar
元素)。 我尝试了以下方法:
driver.findElement(By.xpath("//input[matches(@value,'.*\\/foobar$')]"));
但是它抛出一个InvalidSelectorException。 我已经让它可以像这样与cssSelector一起使用...
driver.findElement(By.cssSelector(input[value$='\\/foobar']));
但是我仍然很好奇如何使用xpath完成此操作。 有什么建议么?
编辑:我还应该注意,我希望能够找到此元素而又不知道最后一个斜杠(aka /p1/
)之前的字符。
尝试
//input[@value='/p1/foobar']
如果您不知道开头是什么,则必须诉诸功能:
//input[contains(@value, 'foobar') and substring-after(@value, 'foobar') = '']
这是一个“小提琴”
<?xml version="1.0" encoding="UTF-8"?>
<result>
<input id="" name="checkbox1" onclick="" partition="p1" type="checkbox" value="/p1/foobar1"/>
<input id="" name="checkbox2" onclick="" partition="p1" type="checkbox" value="/p1/foobar"/>
<input id="" name="checkbox3" onclick="" partition="p2" type="checkbox" value="/p2/foobar2"/>
</result>
http://www.xpathtester.com/xpath/4dc56e27ca1674ea0b5b48357214b907
如我可以在XPath表达式中使用正则表达式所述。 ,XPath 1.0不支持正则表达式。
这里有很多例子:
https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx
这是XPath函数的列表:
https://msdn.microsoft.com/en-us/library/ms256180(v=vs.110).aspx
使用xpath包含功能。 相当复杂。 可能您不想走这条路。 但这也可以做到
//input[contains(@value,'foo') and (not(contains(@value,'foobar1'))) and (not(contains(@value,'foobar2')))]
*请记住复杂性,我认为CssSelector最适合这种情况。
XPath不支持正则表达式。 您将不得不求助于其他XPath函数,例如,您可以使用类似以下内容的东西:
//input[ends-with(@value,'foobar')]
有XPath函数组成的漂亮的列表在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.