XPath: функция regex in содержит функцию
Я хотел бы сопоставить следующий текст sometext12345_text
с использованием следующего регулярного выражения.
Я использую это в одном из моих тестов на селен.
String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
Кажется, что это не работает. Может ли кто-нибудь помочь?
Ответы
Ответ 1
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')]
Ответ 2
Если вы используете Selenium с Firefox, вы сможете использовать расширения EXSLT и регулярное выражение: тест()
Это работает для вас?
String expr = "//*[regexp:test(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));