我想获得对DOM树的引用(最好是WebDriver.getPageSource
),以便能够在CI服务的功能测试中记录DOM树。 Search results point to NoClassDefFoundError
s and usage tutorials,但与此问题无关。
请注意,我不是在寻找一种方法来检索页面源,但是DOM树包括页面加载后的最终更改
获取上次加载的页面的来源。如果页面在加载后已被修改(例如,通过Javascript),则无法保证返回的文本是已修改页面的文本。
(来自{{1}} Javadoc)。
答案 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更改,只需重复序列。