Selenium - 如何在部分文本上使用getText()?

时间:2014-10-02 09:23:14

标签: selenium gettext

当我在下一个网络课程上使用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:30 - 上午9:45 而不应用Java的substring()等特殊方法?

3 个答案:

答案 0 :(得分: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将是您已使用Seleniums方法之一找到元素的锚点。如果你需要更精细的东西(例如删除空格或你不想要的任何其他无关的字符)并且在Java方面无法做到这一点,你可以将它添加到JavaScript方面的上述代码中。例如,如果你想摆脱前导空格和尾随空格,你可以拥有return ret.trim()

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

答案 1 :(得分:0)

我认为你应该使用substring()

答案 2 :(得分:0)

<a>中的DOM结构禁止您使用JQuery函数来操作DOM easilly。

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]