wake-up-neo.net

XPath: Verwenden von Regex in enthält Funktion

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?

47
ragesh

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')]
57
Robin

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));
5
paul trmbrth