XPath: использование regex в функции contains

Я хотел бы сопоставить следующий текст sometext12345_text используя приведенные ниже выражения. Я использую это в одном из моих тестов на селен.

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

это, похоже,не работает. Кто-нибудь может помочь?

2 ответов


XPath 1.0 не обрабатывает регулярное выражение изначально, вы можете попробовать что-то вроде

//*[starts-with(@id, 'sometext') and ends-with(@id, '_text')]

(как указывает Павел Т //*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))] может использоваться для выполнения той же проверки, что и исходное регулярное выражение, Если Вам также нужно проверить средние цифры)

В XPath 2.0, попробовать

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

Если вы используете Selenium с Firefox, вы должны иметь возможность использовать расширения EXSLT и регулярное выражение: test ()

это работает для вас?

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