计算HTML元素的内部文本字母

时间:2012-07-03 16:11:52

标签: html selenium

有没有办法计算HTML元素内部文本的字母,而不计算内部元素文本的字母?

我使用Selenium库尝试了“WebElements”的“.getText()”方法,但这计算了(eG“< body>< div> test< / div>中的内部网络元素的内部文本。 < / body>“为”div“”body“元素生成4个字母,而不是”body“元素的 0

我是否必须使用额外的HTML解析库,如果是,您会推荐哪一个?

我正在使用Java 7 ...

1 个答案:

答案 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);