web-dev-qa-db-ja.com

XPath:包含関数での正規表現の使用

次の正規表現を使用して、次のテキストsometext12345_textを照合したいと思います。 Seleniumテストの1つでこれを使用しています。

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

しかし、それはうまくいかないようです。誰か助けてもらえますか?

47
ragesh

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

FirefoxでSeleniumを使用している場合、 EXSLT extensions および regexp:test() を使用できるはずです。

これはあなたのために働きますか?

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