I am trying to find an input element with dynamic id name always ending with "register". So far I tried this
"//input[@id[ends-with(.,'register')]]"
and this
"//input[ends-with(@id,'register')]"
none of these result in an element. What am I doing wrong? At the same time this works:
"//input[@id[contains(.,'register')]]"
Here's the part of source:
<td class="input"> <input id="m.f0.menu.f2.volumeTabs.BLOCK_COMMON.tcw.form.register" name="m.f0.menu.f2.volumeTabs.BLOCK_COMMON.tcw.form.register" class="aranea-checkbox" type="checkbox"> </td>
XPath Starts-with. XPath Ends-with. Using “OR” Statement. Using “AND” Statement.
This is the equivalent to the XPath ends-with. Therefore, $= is the correct answer.
XPath text() function is a built-in function of the Selenium web driver that locates items based on their text. It aids in the identification of certain text elements as well as the location of those components within a set of text nodes. The elements that need to be found should be in string format.
No, Chrome uses XPath 1.0. Trying any other XPath 2.0 function such as current-date() will yield a similar error.
The ends-with
function is part of xpath 2.0 but browsers (you indicate you're testing with chrome) generally only support 1.0. So you'll have to implement it yourself with a combination of string-length
, substring
and equals
substring(@id, string-length(@id) - string-length('register') +1) = 'register'
The accepted answer by Ian Roberts uses the @id attribute
twice in his solution.
In this case I prefer to put the predicate on that @id
like this:
//input[@id[substring(.,string-length(.) - string-length('register') + 1) = 'register']]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With