我想使用下面的正则表达式匹配以下文本sometext12345_text
。
我在我的一项硒测试中使用它。
String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
它似乎不起作用。有人可以帮忙吗?
答案 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 extensions和regexp: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')]`\