使用正则表达式

时间:2015-05-13 17:35:22

标签: java selenium selenium-webdriver

我有以下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/

的情况下找到此元素

3 个答案:

答案 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