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?
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')]
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));