当前位置:  开发笔记 > 编程语言 > 正文

使用XPATH搜索包含 的文本

如何解决《使用XPATH搜索包含 的文本》经验,为你挑选了2个好方法。

我使用XPather Browser在HTML页面上检查我的XPATH表达式.

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

我有一个HTML文件,其内容与此类似:


  abc
   

我想选择一个包含字符串"  " 的文本的节点.

使用像"abc"这样的普通字符串是没有问题的.我使用类似的XPATH //td[text()="abc"].

当我尝试使用XPATH时,//td[text()=" "]它什么都不返回.是否有关于" &"的文本的特殊规则?



1> Bergeroy..:

似乎OpenQA,Selenium背后的人,已经解决了这个问题.他们定义了一些变量来明确地匹配空格.在我的情况下,我需要使用类似的XPATH //td[text()="${nbsp}"].

我在这里转载了OpenQA关于这个问题的文本(在这里找到):

HTML自动规范化元素中的空白,忽略前导/尾随空格并将额外的空格,制表符和换行符转换为单个空格.当Selenium从页面中读取文本时,它会尝试复制此行为,因此您可以忽略HTML中的所有选项卡和换行符,并根据文本在呈现时在浏览器中的显示方式进行断言.我们通过用一个空格替换所有不可见的空格(包括非破坏空格"  ")来实现这一点.所有可见换行符(
,

,和

格式化新线)应予以保留.

我们在HTML Selenese测试用例表的文本中使用相同的规范化逻辑.这具有许多优点.首先,您不需要查看页面的HTML源代码来确定您的断言应该是什么; "  "符号对最终用户是不可见的,因此在编写Selenese测试时您不必担心它们.(您不需要 在测试用例中将" "标记放在包含"  " 的字段上的assertText .)您也可以在Selenese 标记中添加额外的换行符和空格 ; 因为我们在测试用例上使用与文本相同的规范化逻辑,所以我们可以确保断言和提取的文本完全匹配.

当您真正想要/需要在测试用例中插入额外的空格时,这会在极少数情况下产生一些问题.例如,您可能需要在以下字段中键入文本:" foo ".但是,如果您只是foo 在Selenese测试用例中写入,我们将用一个空格替换您的额外空间.

这个问题有一个简单的解决方法.我们在Selenese中定义了一个变量 ${space},它的值是一个单独的空间.您可以使用${space}以插入不会自动修剪的空间,如下所示: foo${space}${space}${space}.我们还包含了一个变量 ${nbsp},可用于插入不间断的空间.

请注意,XPath 不像我们那样规范化空格.如果您需要编写类似XPath //div[text()="hello world"]但链接的HTML真的是" hello world",那么您需要 在Selenese测试用例中插入一个真实的" "以使其匹配,如下所示: //div[text()="hello${nbsp}world"].



2> PhiLho..:

当我通过在两个引号之间的Windows上键入Alt + 0160来输入硬编码的非破坏空间(U + 00A0)时,我发现我可以进行匹配...

//table[@id='TableID']//td[text()=' ']

为我工作的特殊字符.

根据我的理解,XPath 1.0标准不处理转义Unicode字符.在XPath 2.0中似乎有相应的功能,但看起来Firefox不支持它(或者我误解了一些东西).所以你必须使用本地代码页.丑陋,我知道.

实际上,看起来标准依赖于编程语言使用XPath来提供正确的Unicode转义序列......所以,不知何故,我做了正确的事情.


用PHP成功完成这个工作:`$ col = $ xpath-> query("// p [text()= \"\ xC2\xA0 \"]");`
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有