Ich würde gerne den folgenden Text finden sometext12345_text
mit dem unten stehenden regulären Ausdruck. Ich benutze dies in einem meiner Selentests.
String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
Es scheint jedoch nicht zu funktionieren. Kann jemand helfen?
XPath 1.0 ist nicht für reguläre Ausdrücke geeignet. Sie können beispielsweise Folgendes ausprobieren
//*[starts-with(@id, 'sometext') and ends-with(@id, '_text')]
(Wie von paul t hervorgehoben, kann //*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))]
verwendet werden, um die gleiche Prüfung durchzuführen, die Ihr Original-Regex durchführt, wenn Sie auch nach mittleren Ziffern suchen müssen.)
Versuchen Sie es in XPath 2.0
//*[matches(@id, 'sometext\d+_text')]
Wenn Sie Selenium mit Firefox verwenden, sollten Sie in der Lage sein, EXSLT-Erweiterungen und regulärer Ausdruck: test () zu verwenden
Geht das für dich?
String expr = "//*[regexp:test(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));