我的最终目标是在Selenium中使用这些表达式来测试我的用户界面。
<tr> <td>abc</td> <td> </td> </tr>
我想选择一个文本包含字符串“& nbsp;”的节点。
用一个正常的字符串像“abc”没有问题。我使用类似于// td [text()=“abc”]的XPATH。
当我尝试使用像// td [text()=“& nbsp;”]这样的XPATH时,它不返回任何内容。有关于“&”的文本的特殊规则?
我在这里转载了OpenQA关于这个问题的文本(发现here):
HTML automatically normalizes
whitespace within elements,ignoring
leading/trailing spaces and converting
extra spaces,tabs and newlines into a
single space. When Selenium reads text
out of the page,it attempts to
duplicate this behavior,so you can
ignore all the tabs and newlines in
your HTML and do assertions based on
how the text looks in the browser when
rendered. We do this by replacing all
non-visible whitespace (including the
non-breaking space “
“) with a
single space. All visible newlines
(<br>
,<p>
,and<pre>
formatted
new lines) should be preserved.We use the same normalization logic on
the text of HTML Selenese test case
tables. This has a number of
advantages. First,you don’t need to
look at the HTML source of the page to
figure out what your assertions should
be; “
” symbols are invisible
to the end user,and so you shouldn’t
have to worry about them when writing
Selenese tests. (You don’t need to put
“
” markers in your test case
to assertText on a field that contains
“
“.) You may also put extra
newlines and spaces in your Selenese
<td>
tags; since we use the same
normalization logic on the test case
as we do on the text,we can ensure
that assertions and the extracted text
will match exactly.This creates a bit of a problem on
those rare occasions when you really
want/need to insert extra whitespace
in your test case. For example,you
may need to type text in a field like
this: “foo
“. But if you simply
write<td>foo </td>
in your
Selenese test case,we’ll replace your
extra spaces with just one space.This problem has a simple workaround.
We’ve defined a variable in Selenese,
${space}
,whose value is a single
space. You can use${space}
to
insert a space that won’t be
automatically trimmed,like this:
<td>foo${space}${space}${space}</td>
.
We’ve also included a variable
${nbsp}
,that you can use to insert
a non-breaking space.Note that XPaths do not normalize
whitespace the way we do. If you need
to write an XPath like
//div[text()="hello world"]
but the
HTML of the link is really
“hello world
“,you’ll need to
insert a real “
” into your
Selenese test case to get it to match,
like this:
//div[text()="hello${nbsp}world"]
.