sanjuro8998
sanjuro8998

Reputation: 1261

Xpath expression with OR

I'd like to know if there is a way to verify multiple strings on a Xpath. This is the one I'm using now:

/td[2][text()[contains(.,'Word1')]]

I'd like to do something like this:

/td[2][text()[contains(.,'Word1' OR 'Word2' OR 'Word3')]]

Is that possible?

Upvotes: 2

Views: 122

Answers (4)

Gabrielius
Gabrielius

Reputation: 1056

Updated answer:

I believe, the problem why you are experiencing is case-sensitivity, try writing or in lower-case:

//td[text()[contains(.,'Word1') or contains(.,'Word2') or contains(.,'Word3')]]

If it doesn't help, you can use Union approach:

/td[2][text()[contains(.,'Word1')]] | /td[2][text()[contains(.,'Word2')]] | /td[2][text()[contains(.,'Word3')]]

Upvotes: 2

Mads Hansen
Mads Hansen

Reputation: 66723

With XPath 2.0 or 3.0 you could also use:

  • A Quantified Expression to loop over a sequence of words and test if any of the words are contained

    //td[2][text()[some $word in ('Word1', 'Word2', 'Word3') satisfies contains(., $word)]]

  • The matches() function and specify your list of words in a regex:

    //td[2][text()[matches(., 'Word1|Word2|Word3')]]

Upvotes: 1

drkthng
drkthng

Reputation: 6909

yes it's possible:

/td[2][text()[contains(.,'Word1') OR contains(.,'Word2') OR contains(.,'Word3')]]

Upvotes: 2

Mitya
Mitya

Reputation: 34556

Yes - you just need separate contains() calls:

[contains(., 'Word1') OR contains(., 'Word2') OR contains(., 'Word3')]

As you have it currently, a boolean being passed as the second parameter to contains, rather than a string.

Upvotes: 1

Related Questions