【问题标题】:Selenium WebDriver not finding correct element with nodePath/text() methodSelenium WebDriver 找不到使用 nodePath/text() 方法的正确元素
【发布时间】:2017-07-10 21:33:54
【问题描述】:

我正在尝试获取网络应用程序上的特定文本元素。我无法共享 Html,但相关部分如下所示:

<div id ="user">
    <div class="large columns">         
                <label for="object.disabled" class="readOnlyClass  hide-label">
                    Text1
                </label>
                <div id="123x435q" class="readOnlyClass  hide">
                    <input class="disabled-field" id="123x435qs" type="text" value="07/20/2017" disabled="">
                </div>
    <div class="class1">
      <div>Text2</div>
    "

    07/10/2017
    "
    </div>
</div>

当我尝试通过 //*[@id='user']/div[2] 的 xpath 找到 element.getText().trim() 时

我得到结果:Text2 2017 年 7 月 10 日

我正在尝试仅获取 2017 年 7 月 10 日的文本。所以我尝试了 //*[@id='user']/div[2]/text()[2]

的 xpath

当我在 Chrome 控制台中运行它时: $x(//*[@id='user']/div[2]/text()[2]) 我的文本节点的文本属性为 07/ 10/2017(我所期望的)。但是我在运行 Selenium 时得到的是:Text1。

所以有两个问题: 1. 为什么 path/text() 在 Selenium 中返回 Text1 而不是在 Chrome 控制台中? 2. 如何让一个元素只返回 class1 div 节点中的日期文本而不返回 Text2 文本?

【问题讨论】:

    标签: java css selenium xpath


    【解决方案1】:

    1 - Selenium 不支持 TextNode。你可以得到'Text1',因为它是元素'Label'的文本,而'Text2'是'Div'元素内的一个TextNode。

    2 - 您必须使用其他解决方案来获取日期文本。请参阅下面的示例。

    String outerText = driver.findElement(by.cssSelector("#user > div.class1")).getText();
    String innerText = driver.findElement(by.cssSelector("#user > div.class1 > div")).getText();
    String dateText = outerText.replace(innerText,"");
    

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2017-10-24
      相关资源
      最近更新 更多