【问题标题】:How can I use Selenium's getText() on partial text?如何在部分文本上使用 Selenium 的 getText()?
【发布时间】:2014-10-02 09:23:14
【问题描述】:

当我在下一个网络课程中使用getText() 方法时,我得到了与之关联的全文:

$('.row.session-panel.form-group .session-name [href]')[0]

<a href=​"/​10002267/​agenda/​session/​10020933">​"8:30am - 9:45am "<span>​Welcoming Notes​</span>​</a>​

如果我使用getText(),我将获得完整的 文本:“上午 8:30 - 上午 9:45 欢迎语”。有没有办法只获得 8:30am - 9:45am 而不应用 Java 的特殊方法,如 substring()

【问题讨论】:

    标签: selenium gettext


    【解决方案1】:

    看起来您想要的只是由a 元素中的文本节点直接表示的文本。目前 Selenium 中没有一种方法可以在不获取其子元素的文本的情况下获取元素的文本。您可以执行以下操作直接从 DOM 中提取文本。

    String text = (String) ((JavascriptExecutor) driver).executeScript(
        "var parent = arguments[0]; "+
        "var child = parent.firstChild; "+
        "var ret = ""; "+
        "while(child) { "+
        "    if (child.nodeType === Node.TEXT_NODE) "+
        "        ret += child.textContent; "+
        "    child = child.nextSibling; "+
        "} "+
        "return ret;", a);
    

    (我已经有一段时间没有定期使用 Java 进行编码了。这是从 Python 代码转换而来的。可能有更好的方式来表示它。)

    变量a 将是您已经使用Selenium 的一种查找元素的方法找到的锚点。如果您需要更好的东西(例如删除空格或任何其他您不想要的无关字符)并且在 Java 端无法做到这一点,您可以在 JavaScript 端将其添加到上面的代码中。例如,如果您想去掉前导和尾随空格,您可以使用 return ret.trim()

    我已经在 Chrome、Firefox 和 Internet Explorer 10-11 上使用了上述方法,没有出现任何问题。我没有看到任何最基本的 DOM 级别未涵盖的内容,因此我希望它可以在任何浏览器上运行。

    【讨论】:

      【解决方案2】:

      我认为你应该使用 substring()。

      【讨论】:

        【解决方案3】:

        &lt;a&gt; 内部的 DOM 结构禁止您使用 jQuery 函数轻松操作 DOM。

        var fullTxt = $('.row.session-panel.form-group .session-name [href]')[0].getText()
        var spanTxt = $('.row.session-panel.form-group .session-name [href] > span')[0].getText();
        var finalTxt = fullTxt.replace(spanTxt,"")
        

        如果你不能使用substring(),我猜你也不能使用split('"')[1]

        【讨论】:

          猜你喜欢
          • 2022-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-15
          • 2020-10-08
          • 1970-01-01
          • 1970-01-01
          • 2020-10-06
          相关资源
          最近更新 更多