web-dev-qa-db-fra.com

XPath: utilisation de regex dans contient la fonction

Je voudrais faire correspondre le texte suivant sometext12345_text en utilisant la regex ci-dessous. J'utilise ceci dans l'un de mes tests de sélénium.

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

Cela ne semble pas fonctionner cependant. Quelqu'un peut aider?

47
ragesh

XPath 1.0 ne gère pas regex de manière native, vous pouvez essayer quelque chose comme

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

(comme l'a souligné paul t, //*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))] peut être utilisé pour effectuer le même contrôle que celui que votre regex originale effectue, si vous devez également vérifier les chiffres du milieu)

Dans XPath 2.0, essayez

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

Si vous utilisez Selenium avec Firefox, vous devriez pouvoir utiliser extensions EXSLT , et regexp: test ()

Est-ce que ça marche pour toi?

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