我有一个现成的代码,我正在尝试使用selenium为它编写测试 . 这就是我的代码在chrome的元素选项卡中的样子:
<table id="xyz">
<tbody>
<tr>...</tr>
"
I am not able to retrieve this text.
"
</tbody>
</table>
在chrome的控制台选项卡中执行此操作 $x("//*[contains(text(),'I am not able to retrieve this text')]");
没有显示任何结果 . 如果文本是以div,span等定义的,我可以通过此命令获取文本 . (区分大小写也不是问题) .
在使用 jQuery('tbody').append( abc() );
和abc()函数在tbody中附加文本的代码中,以这种方式返回此文本pqr.html();
现在我的问题是我应该写什么xpath表达式来 grab 这个文本?我正在寻找一个纯xpath表达式,即没有java函数等 .
2 回答
contains()
期望奇异值作为第一个参数 . HTML元素中可能包含多个文本节点子节点,在这种情况下,您尝试的XPath将仅评估第一个文本节点 . 根据发布的HTML示例,将评估<tbody>
的第一个文本节点由换行符和一些空格组成,因此您的XPath不会将<tbody>
视为匹配并且不返回任何结果 .为避免上述问题,请在谓词中使用
contains()
用于单个文本节点,如下所示:或者这样,如果要返回文本节点本身而不是父元素:
那个
table
元素可能在一个框架内 . 要访问框架内的内容,您需要先切换到它 . 您可以在selenium中使用"switch to"方法 . 请参阅answer和one .出于同样的原因,它无法在Chrome Dev Tools控制台中运行 . 在控制台选项卡中,有一个包含框架列表的下拉列表 . 确保选择存在特定元素的正确框架,然后执行XPath .