我有以下WebElements:
<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中使用正则表达式基于value属性找到上述源中的第二个元素(值为/p1/foobar
的元素)。我尝试过以下方法:
driver.findElement(By.xpath("//input[matches(@value,'.*\\/foobar$')]"));
但它会抛出InvalidSelectorException。我已经得到它与cssSelector一样工作......
driver.findElement(By.cssSelector(input[value$='\\/foobar']));
但我仍然很好奇如何使用xpath实现这一目标。有什么建议吗?
编辑:我还应该注意,我希望能够在不知道最后一个斜线之前的字符(又名/p1/
)
答案 0 :(得分:4)
尝试
//input[@value='/p1/foobar']
如果你不知道它的起源,你必须求助于函数:
//input[contains(@value, 'foobar') and substring-after(@value, 'foobar') = '']
这是一个小提琴&#39;
<?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
如Can I use a Regex in an XPath expression?所述,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
答案 1 :(得分:0)
使用xpath包含函数。相当复杂。可能你不想走这条路。但这也可以做到
//input[contains(@value,'foo') and (not(contains(@value,'foobar1'))) and (not(contains(@value,'foobar2')))]
*考虑到复杂性,我认为CssSelector最适合这种情况。
答案 2 :(得分:0)
XPath不支持正则表达式。您将不得不使用其他XPath函数,例如,您可以使用以下内容:
//input[ends-with(@value,'foobar')]
有一个很好的XPath函数列表here。