I have a node as follows:
<span class="portal-text-medium">Office Hours</span>
For the XPath I use
//span[text()='Office Hours']
which should work, but it never does. I can use *contains(text(),'Office Hours')]*
but that won't find an exact match and I have to verify there is no "*". This is not the only time it hasn't worked for me. I have seen it work before so I don't know what is wrong. Any idea?
Yes I can, and do, use starts-with
but it is not quite the same.
XPath
text() =
is different than XPath. =
(Matching text nodes is different than matching string values)
The following XPaths are not the same...
//span[text() = 'Office Hours']
Says:
Select the
span
elements that have an immediate child text node equal to 'Office Hours`.//span[. = 'Office Hours']
Says:
Select the
span
elements whose string value is equal to 'Office Hours`.In short, for element nodes:
Examples
The following
span
elements would match only #1:<span class="portal-text-medium">Office Hours<br/>8:00-10:00</span>
<span class="portal-text-medium">My<br/>Office Hours</span>
The following
span
elements would match only #2:<span class="portal-text-medium"><b>Office</b> Hours</span>
<span class="portal-text-medium"><b><i>Office Hours</i></b></span>
The following
span
element would match both #1 and #2:<span class="portal-text-medium">Office Hours</span>