XPath: utilisation de regex dans la fonction contains

j'aimerais correspondre le texte suivant sometext12345_text en utilisant le regex ci-dessous. J'utilise ça dans un de mes tests sur le sélénium.

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

Il ne semble pas fonctionner. Quelqu'un peut-il aider?

36
demandé sur ragesh 2014-01-28 16:07:11

2 réponses

XPath 1.0 ne gère pas les regex en mode natif, vous pouvez essayer quelque chose comme

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

(comme le souligne paul t,//*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))] peut être utilisé pour effectuer la même vérification que votre regex original fait, si vous avez besoin de vérifier les chiffres du milieu aussi bien)

dans XPath 2.0, essayez

//*[matches(@id, 'sometext\d+_text')]
42
répondu Robin 2014-01-28 13:54:20

si vous utilisez du sélénium avec Firefox vous devriez pouvoir utiliser extensions EXSLT et regexp: test ()

Est-ce que cela fonctionne pour vous?

String expr = "//*[regexp:test(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
4
répondu paul trmbrth 2014-01-28 12:16:54