无法使用selenium选择文本

时间:2016-02-29 12:28:16

标签: html selenium xpath

我有一个现成的代码,我正在尝试使用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表达式才能获取此文本?我正在寻找一个纯xpath表达式,即没有java函数等。

2 个答案:

答案 0 :(得分:0)

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

为避免上述问题,请在谓词中使用contains()作为单个文本节点,如下所示:

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

或者这种方式,如果你想返回文本节点本身而不是父元素:

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

答案 1 :(得分:0)

window.open元素可能在一个框架内。要访问框架内的内容,您需要先切换到它。您可以使用&#34;切换到&#34;硒的方法。请参阅此answer和此one

出于同样的原因,它无法在Chrome Dev Tools控制台中运行。在控制台选项卡中,有一个包含框架列表的下拉列表。确保选择存在特定元素的正确帧,然后执行XPath。