How to use XPath contains() for specific text? How to use XPath contains() for specific text? selenium selenium

How to use XPath contains() for specific text?


Be careful of the contains() function.

It is a common mistake to use it to test if an element contains a value. What it really does is test if a string contains a substring. So, td[contains(.,'8')] takes the string value of td (.) and tests if it contains any '8' substrings. This might be what you want, but often it is not.

This XPath,

//td[.='8']

will select all td elements whose string-value equals 8.

Alternatively, this XPath,

//td[normalize-space()='8']

will select all td elements whose normalize-space() string-value equals 8. (The normalize-space() XPath function strips leading and trailing whitespace and replaces sequences of whitespace characters with a single space.)

Notes:

  • Both will work even if the 8 is inside of another element such as aa, b, span, div, etc.
  • Both will not match <td>gr8t</td>, <td>123456789</td>, etc.
  • Using normalize-space() will ignore leading or trailing whitespacesurrounding the 8.


Try the following xpath, which will select the whole text contents rather than partial matches:

//table//td[text()='8']

Edit: Your example HTML has a tags inside the td elements, so the following will work:

//table//td/a[text()="8"]

See example in php here: https://3v4l.org/56SBn