I would like to match the following text sometext12345_text
using the below regex.
I'm using this in one of my selenium tests.
String expr = "//*[contains(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
It doesn't seem to work though. Can somebody help?
XPath 1.0 doesn't handle regex natively, you could try something like
//*[starts-with(@id, 'sometext') and ends-with(@id, '_text')]
(as pointed out by paul t, //*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))]
could be used to perform the same check your original regex does, if you need to check for middle digits as well)
In XPath 2.0, try
//*[matches(@id, 'sometext\d+_text')]
In Robins's answer ends-with is not supported in xpath 1.0 too.. Only starts-with is supported... So if your condition is not very specific..You can Use like this which worked for me
//*[starts-with(@id,'sometext') and contains(@name,'_text')]`\
If you're using Selenium with Firefox you should be able to use EXSLT extensions, and regexp:test()
Does this work for you?
String expr = "//*[regexp:test(@id, 'sometext[0-9]+_text')]";
driver.findElement(By.xpath(expr));
InvalidSelectorError: Unable to locate an element with the xpath expression //*[regexp:test(@id, 'sometext[0-9]+_text')] because of the following error: [Exception... "An attempt was made to create or change an object in a way which is incorrect with regard to namespaces" code: "14" nsresult: "0x8053000e (NamespaceError)" location: "<unknown>"]
Thanks for helping.
"http://exslt.org/regular-expressions"
under the "regexp"
prefix, it could work
Success story sharing
//*[boolean(number(substring-before(substring-after(@id, "sometext"), "_text")))]
, but it's highly specific to this use case