XPath:在包含函数中使用正则表达式

时间:2014-01-28 12:07:12

标签: regex xpath selenium-webdriver contains

我想使用下面的正则表达式匹配以下文本sometext12345_text。 我在我的一项硒测试中使用它。

String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));

它似乎不起作用。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:56)

XPath 1.0本身不处理正则表达式,你可以尝试像

这样的东西
//*[starts-with(@id, 'sometext') and ends-with(@id, '_text')]

(正如paul t所指出的那样,//*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))]可用于执行原始正则表达式的相同检查,如果您还需要检查中间数字)

在XPath 2.0中,尝试

//*[matches(@id, 'sometext\d+_text')]

答案 1 :(得分:5)

如果您在Firefox中使用Selenium,您应该可以使用EXSLT extensionsregexp:test()

这对你有用吗?

String expr = "//*[regexp:test(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));

答案 2 :(得分:3)

在Robins的答案中,xpath 1.0也不支持end-with。.仅支持starts-with ... 因此,如果您的病情不是很具体。.您可以使用对我有用的

//*[starts-with(@id,'sometext') and contains(@name,'_text')]`\