有没有办法计算HTML元素内部文本的字母,而不计算内部元素文本的字母?
我使用Selenium库尝试了“WebElements”的“.getText()”方法,但这计算了(eG“< body>< div> test< / div>中的内部网络元素的内部文本。 < / body>“为”div“和”body“元素生成4个字母,而不是”body“元素的 0
我是否必须使用额外的HTML解析库,如果是,您会推荐哪一个?
我正在使用Java 7 ...
答案 0 :(得分:1)
基于this answer for a similar question,我为你做了一个解决方案:
这段JavaScript接受一个元素,迭代它的所有子节点,如果它们是文本节点,它会读取它们并将它们连接起来:
var element = arguments[0];
var text = '';
for (var i = 0; i < element.childNodes.length; i++)
if (element.childNodes[i].nodeType === Node.TEXT_NODE) {
text += element.childNodes[i].textContent;
}
return text;
我已将此脚本保存到script.js
文件中,并通过FileUtils.readFileToString()
将其加载到单个String
中。您也可以使用Guava的Files.toString()
。或者只是将其嵌入到Java代码中。
final String script = FileUtils.readFileToString(new File("script.js"), "UTF-8");
JavascriptExecutor js = (JavascriptExecutor)driver;
...
WebElement element = driver.findElement(By.anything("myElement"));
String text = (String)js.executeScript(script, element);