当我在下一个网络课程上使用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()
等特殊方法?
答案 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]
。