使用XPATH搜索包含 

我使用XPather浏览器检查HTML页面上的XPATH表达式

我的最终目标是在Selenium中使用这些表达式来测试我的用户界面

我得到了一个HTML文件,其内容类似于:

<tr>
<td>abc&lt/td>
<td&gt&nbsp&lt/td>
&lt/tr>

我想选择包含字符串“”的文本的节点

对于像“abc”这样的普通字符串,没有问题。我使用类似于//td[text()=“abc”]的XPATH

当我尝试使用类似于//td[text()=“ ”]的XPATH时,它不会返回任何结果。对于带有“”和“”的文本是否有特殊规定

似乎Selenium背后的OpenQA已经解决了这个问题。他们定义了一些变量来明确匹配空格。在我的例子中,我需要使用类似于//td[text()=“${nbsp}”]的XPATH

我在这里复制了OpenQA中有关此问题的文本(见此处):

HTML自动规范化
元素中的空白,忽略
前导/尾随空格和转换
将额外的空格、制表符和换行符添加到
单一空间。当Selenium读取文本时
在页面外,它试图
复制此行为,以便
忽略中的所有选项卡和换行符
您的HTML和do断言基于
显示时文本在浏览器中的外观
提供。我们通过替换所有
不可见的空白(包括
不间断空格“ ”),带有
单一空间。所有可见的换行符
<br><p>,和<pre>格式化
新行)应保留

我们在上使用相同的规范化逻辑
HTML Selenese测试用例的文本
桌子。这有很多原因
优势。首先,你不需要
查看页面的HTML源代码,以便
弄清楚你的断言应该是什么
是“”符号不可见
给最终用户,所以你不应该
写作时必须担心他们
硒测试。(你不需要把
测试用例中的标记
在包含
”)您也可以添加额外的
Selenese中的换行符和空格
<td&gt标签;因为我们使用相同的
测试用例上的规范化逻辑
正如我们在文本上所做的那样,我们可以确保
声明和提取的文本
完全匹配

这就给我们的工作带来了一点问题
当你真的
想要/需要插入额外的空白
在您的测试用例中。比如你
可能需要在如下字段中键入文本
这是:“foo”。但如果你只是
<td>富&lt/td&gt在您的
Selenese测试用例,我们将替换您的
只有一个空格的额外空格

这个问题有一个简单的解决方法。
我们用塞勒涅斯语定义了一个变量,
${space},其值为单个
空间您可以使用${space}
插入一个不会被删除的空格
自动修剪,如下所示:
<td>foo${space}${space}${space}&lt/td&gt。
我们还包含了一个变量
${nbsp},可用于插入
不间断的空间

请注意,XPath不规范化
我们使用的是空格。如果你需要
编写类似XPath的
//div[text()=“hello world”]但是
链接的HTML是非常有用的
hello world”,您需要
将真实的“”插入到
Selenese测试用例以使其匹配,
这样地:
//div[text()=“hello${nbsp}world”]

发表评论