如何使用xml文件对我的HtmlUnit代码进行单元测试

时间:2013-12-09 15:00:06

标签: java htmlunit

我正在编写一个使用HtmlUnit屏幕抓取一些数据的应用程序。哪些字段来自页面的哪些部分以及检索它们的XPath的逻辑变得有点复杂,所以在重构之前我想编写一些简单的单元测试。我使用'page.asXml()'方法获取页面XML并将其保存为我的测试资源文件夹中的文件,但是如何将其作为HtmlPage加载回来?

例如

    HtmlPage page = webClient.getPage(url);
    System.out.println(page.asXml());

现在在我的单元测试中我想做相同的:

    HtmlPage page = new HtmlPage(myXmlTestFile);

但我似乎无法找到任何可以做到这一点的事情。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我的最终解决方案(与其他一些SO帖子相结合):

    URL url = new URL("http://www.example.com");

    InputStream is = this.getClass().getClassLoader().getResourceAsStream("myPageXmlFile.xml");
    String xmlPageString = IOUtils.toString(is);

    StringWebResponse response = new StringWebResponse(xmlPageString, url);
    WebClient client = WebClientConnector.createWebClient(false); // helper method for creating a WebClient instance
    HtmlPage page = HTMLParser.parseXHtml(response, client.getCurrentWindow());

答案 1 :(得分:1)

我认为你应该尝试三件事:

  1. 将其另存为XML,然后再从本地文件系统中获取(这将是您尝试做的事情):

    // save the page as a string into file "myfile.xml" and then...
    HtmlPage page = webClient.getPage("file:///home/Matt/Desktop/myfile.xml");
    
  2. 将其另存为HTML页面,然后按照与上一项相同的方式加载:

    String myFile = "file:///home/Matt/Desktop/myfile.html";
    page.save(myFile);
    HtmlPage loadedPage = webClient.getPage(myFile);
    
  3. 而且,最有可能的最佳方式是:在下载时处理页面并保存所需的数据而不是整页:

    String pieceOfData = page.getFirstByXPath("//div[id='magic_id']");
    aCSVFile.write(pieceOfData);
    

答案 2 :(得分:0)

我在单元测试中使用它:

URL input = getClass().getResource("/path/to/file.xml");
XmlPage xmlDoc = new WebClient().getPage(input);

这对CI更好,因为您不需要使用file:///...

处理绝对路径