官网:http://htmlunit.sourceforge.net/
HtmlUnit是一个“GUI程序的GUI-less浏览器”。它模拟HTML文档,并提供一个API,允许您调用页面,填写表单,点击链接等,就像您在“正常”浏览器中所做的一样。
它具有相当好的JavaScript支持(它不断改进),并且能够使用相当复杂的AJAX库来工作,根据所使用的配置模拟Chrome,Firefox或Internet Explorer。
它通常用于测试目的或从网站检索信息。
介绍
该依赖性页面列出了你需要在你的classpath中所有罐子。
com.gargoylesoftware.htmlunit.WebClient类是主要的起点。这将模拟一个Web浏览器,并将用于执行所有的测试。
大多数单元测试将在像JUnit 这样的框架中完成,所以这里的所有示例都将假设我们正在使用它。
在第一个示例中,我们创建了Web客户端,并从HtmlUnit网站加载了主页。然后我们验证此页面是否具有正确的标题。请注意,getPage()可以根据返回的数据的内容类型返回不同类型的页面。在这种情况下,我们期待一种内容类型的text/html,所以我们将结果转换为一个com.gargoylesoftware.htmlunit.html.HtmlPage。
@Test
public void homePage() throws Exception {
//实例化webClent 对象
WebClient webClient = new WebClient();
//获取页面
HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
//返回此页面的标题或如果指定的标题不是一个空字符串。
System.out.println("获取的标题是: 与" + page.getTitleText());
//获取网页中的内容,以XML方法返回
//返回一个字符串表示XML文档的元素和所有它的孩子(递归)。是当前页面编码使用的字符集。
String pageAsXml = page.asXml();
//contains 包含
System.out.println(pageAsXml.contains("<body class=\"composite\">"));
//获取网页中的内容以文本方式返回
//返回一个代表该元素的文本表示会对用户可见的如果这个页面是显示在一个web浏览器。例如,single-selection选择元素将返回当前选中的值为文本。
String pageAsText = page.asText();
//是否包含以下内容
System.out.println(pageAsText.contains("Support for the HTTP and HTTPS protocols"));
}
模仿一个特定的浏览器
通常你会想要模拟一个特定的浏览器。这通过将com.gargoylesoftware.htmlunit.BrowserVersion传递到WebClient构造函数来完成。为一些常见的浏览器提供常量,但您可以通过实例化BrowserVersion创建自己的特定版本。
@Test
public void homePage_Firefox() throws Exception {
//实例化webClent 对象,并设定指定的浏览器
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);
HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
//返回此页面的标题或如果指定的标题不是一个空字符串。
System.out.println("HtmlUnit - Welcome to HtmlUnit" + page.getTitleText());
}