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

时间:2018-04-06 12:02:56

标签: java selenium dom

我想获得对DOM树的引用(最好是WebDriver.getPageSource),以便能够在CI服务的功能测试中记录DOM树。 Search results point to NoClassDefFoundErrors and usage tutorials,但与此问题无关。

请注意,我不是在寻找一种方法来检索页面源,但是DOM树包括页面加载后的最终更改

  

获取上次加载的页面的来源。如果页面在加载后已被修改(例如,通过Javascript),则无法保证返回的文本是已修改页面的文本。

(来自{{1}} Javadoc)。

2 个答案:

答案 0 :(得分:0)

以下是非常即兴的,但是应该检索包含所有修改的DOM树的状态:

/**
 * Retrieves the current state of the DOM tree by executing
 * {@code return document.childNodes[1].outerHTML;} in {@code browser}.
 *
 * @throws TransformerConfigurationException if such an expection occurs
 * during the construction of the parser to read the page source of the
 * {@code browser}
 */
public String retrieveDOMTree(JavascriptExecutor browser) throws TransformerConfigurationException,
        ParserConfigurationException,
        SAXException,
        IOException,
        TransformerException {
    String htmlOuterHtml = (String) browser.executeScript("return document.childNodes[1].outerHTML;");
    return htmlOuterHtml;
}

答案 1 :(得分:-1)

我的想法:

以字符串形式回复页面的页面源:

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()));
}

供参考:

How do I load an org.w3c.dom.Document from XML in a string?

希望它可以帮到你!

当然,如果您需要跟踪dom更改,只需重复序列。