如何在Java中使用Selenium获取org.w3c.doc.Document或Node引用?

8 浏览
0 Comments

如何在Java中使用Selenium获取org.w3c.doc.Document或Node引用?

我想要获取对DOM树的引用(最好是org.w3c.dom.Document),以便能够在CI服务上的功能测试中记录DOM树。搜索结果指向NoClassDefFoundError和使用教程,但没有与该问题相关的内容。

请注意,我不是在寻找获取页面源代码的方法,而是获取包括页面加载后的可能更改在内的DOM树,因为

获取最后加载页面的源代码。如果页面在加载后被修改(例如通过Javascript),则无法保证返回的文本是修改后页面的内容。

(来自WebDriver.getPageSource的Javadoc)。

0
0 Comments

问题的原因:用户想要在使用Selenium进行Java编程时,获取一个org.w3c.doc.Document或Node引用。

解决方法:用户可以按照以下步骤获取org.w3c.doc.Document或Node引用。

首先,将页面源代码作为字符串检索:

String pageSource = driver.getPageSource();

然后将其解析为XML:

Document doc = loadXMLFromString(pageSource);
public Document loadXMLFromString(String xml) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    return builder.parse(new ByteArrayInputStream(xml.getBytes()));
}

上述代码中的`loadXMLFromString`方法将XML字符串转换为org.w3c.doc.Document对象。

最后,用户还可以参考以下链接获得更多信息:

[How do I load an org.w3c.dom.Document from XML in a string?](https://stackoverflow.com/questions/33262)

希望这些内容对您有所帮助!如果需要跟踪DOM的更改,只需重复上述步骤即可。

0
0 Comments

问题的出现原因是想要通过Selenium在Java中获取一个org.w3c.doc.Document或Node引用。在此之前,需要先了解DOM树的当前状态,包括所有的修改。

解决方法是使用下面的代码来检索DOM树的当前状态:

/**
 * 通过在浏览器中执行 { return document.childNodes[1].outerHTML;} 来获取DOM树的当前状态。
 *
 * @param browser 浏览器的JavascriptExecutor对象
 * @return DOM树的当前状态
 * @throws TransformerConfigurationException 如果构造用于读取浏览器页面源代码的解析器时发生异常
 * @throws ParserConfigurationException 如果解析器配置时发生异常
 * @throws SAXException 如果发生SAX解析异常
 * @throws IOException 如果发生IO异常
 * @throws TransformerException 如果发生转换异常
 */
public String retrieveDOMTree(JavascriptExecutor browser) throws TransformerConfigurationException,
        ParserConfigurationException,
        SAXException,
        IOException,
        TransformerException {
    String htmlOuterHtml = (String) browser.executeScript("return document.childNodes[1].outerHTML;");
    return htmlOuterHtml;
}

以上代码片段是通过执行JavaScript语句 `return document.childNodes[1].outerHTML;` 在浏览器中获取DOM树的当前状态。这个方法返回一个字符串,其中包含了整个DOM树的HTML代码。可以将返回的字符串解析为org.w3c.doc.Document或Node引用,以便进一步处理DOM树的内容。同时,该方法可能会抛出TransformerConfigurationException、ParserConfigurationException、SAXException、IOException或TransformerException异常,需要进行相应的异常处理。

0