2016-02-29 55 views
0

我有一个现成的代码,我试图用硒为它写测试。这是我的代码看起来像铬的元素标签:无法使用硒选择文本

<table id="xyz"> 
    <tbody> 
     <tr>...</tr> 
     " 
      I am not able to retrieve this text. 
     " 
    </tbody> 
</table> 

这样做的铬这在控制台$x("//*[contains(text(),'I am not able to retrieve this text')]");标签显示没有结果。如果文本是在div,span等中定义的,我可以通过此命令获取文本(同时区分大小写不是问题)。

在tbody中使用jQuery('tbody').append(abc());添加文本的代码中,abc()函数以这种方式返回此文本pqr.html();

现在我的问题是我应该写什么xpath表达式来获取此文本?我正在寻找一个纯xpath表达式,即没有Java功能等。

+0

这是无效的HTML你不能有一个TextNode作为'tbody'的孩子 – Pete

回答

0

期望奇异值作为第一个参数。一个HTML元素可能会有多个文本节点子元素,在这种情况下,您尝试的XPath将仅评估第一个文本节点。根据发布的示例HTML,<tbody>将被评估的第一个文本节点由换行符和一些空格组成,因此您的XPath不会考虑匹配<tbody>并返回任何结果。

为了避免这个问题如上所述,在谓语使用单个文本节点如下所示:

//*[text()[contains(.,'I am not able to retrieve this text')]] 

还是这样,如果你想返回文本节点本身,而不是父元素:

//*/text()[contains(.,'I am not able to retrieve this text')] 
+0

它的工作。但我遇到了另一个问题。我最初在这个问题的描述中没有提到,但是DOM中有两个地方出现这个文本。现在,当我试图从所需的地方获得文本时,它不会让我得到这些。这是我使用的命令“// html/table [@id,'xyz'] // */text()[contains(。,'我无法检索这个文本')]”和“ // html/table [@id,'xyz']/text()[contains(。,'我无法检索这个文本')]“ –

+0

我自己想通了。 “/html//table[@id='xyz']//*/text()[contains(.('我无法检索此文字')]”。感谢您的回答。它节省了我的很多努力 –

0

table元素可能在一帧内。要访问框架内的内容,您需要先切换到它。您可以在硒中使用“切换到”方法。请参阅此answer和此one

出于同样的原因,它不适用于Chrome开发工具控制台。在控制台选项卡中,下拉列表中包含框架列表。确保选择了特定元素存在的正确帧,然后执行XPath。