首页 文章

无法使用selenium选择文本

提问于
浏览
0

我有一个现成的代码,我正在尝试使用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 回答

  • 0

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

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

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

    或者这样,如果要返回文本节点本身而不是父元素:

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

    那个 table 元素可能在一个框架内 . 要访问框架内的内容,您需要先切换到它 . 您可以在selenium中使用"switch to"方法 . 请参阅answerone .

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

相关问题