简介
对于Java程序,HtmlUnit是一个“无界面的浏览器”。以 HTML documents 为模型,且提供了一个API允许你来调用页面、填写表单、点击链接等等,就像操作一般的浏览器一样。
line-height: 10px;"> 其对于JavaScript的支持非常强大(且在持续提升),甚至能够支持相当复杂的Ajax库,可以通过配置来模拟你想模拟的FireFox或Internet Explorer浏览器。
HtmlUnit常常用来测试或者检索网站的数据。
HtmlUnit不是一般的单元测试框架,以一个特别的方法来模拟浏览器从而达到测试的目的,常常在另外的测试框架如Junit 或 TestNg中使用。
与一些开源的工具Canoo WebTest, JWebUnit, WebDriver, JSFUnit, Celerity不同,被当做一个看不见的浏览器来使用。
特性
支持HTTP和HTTPS协议
支持cookies
能够制定当从服务端获取响应失败时,是抛出异常还是根据内容类型返回特定的页面
支持提交方法 POST和GET (HEAD, DELETE, ...)
能够定制发送到服务器的请求信息报头
对Html响应的支持
支持代理服务器
支持基本的和 NTLM 认证
非常优秀的JavaScript支持
JavaScript支持
HtmlUnit提供非常棒的JavaScript支持,根据配置来模拟浏览器的工作(Firefox 和 internet explore)。运用了Rhino JavaScript 引擎。
一些知名的用于单元测试的JavaScript库包含在HtmlUnit中:
jQuery 1.2.6: Full support
MochiKit 1.4.1: Full support
GWT 2.0.0: Full support
Sarissa 0.9.9.3: Full support
MooTools 1.2.1: Full support
Prototype 1.6.0: Very good support
Ext JS 2.2: Very good support
Dojo 1.0.2: Good support
YUI 2.3.0: Good support
如果要在一个WebClient中关闭JavaScript,调用 WebClient.setJavaScriptEnabled(false)
这是HtmlUnit很好用的一个功能,对于那些页面中使用JS生成的内容,在HtmlUnit中就可以被渲染出来
示例代码
// 得到浏览器对象,直接New一个就能得到,现在就好比说你得到了一个浏览器了
WebClient webclient = new WebClient();
// 这里是配置一下不加载css和javaScript,配置起来很简单,是不是
webclient.getOptions().setCssEnabled(false);
webclient.getOptions().setJavaScriptEnabled(false);
// 做的第一件事,去拿到这个网页,只需要调用getPage这个方法即可
HtmlPage htmlpage = webclient.getPage("http://news.baidu.com/advanced_news.html");
// 根据名字得到一个表单,查看上面这个网页的源代码可以发现表单的名字叫“f”
final HtmlForm form = htmlpage.getFormByName("f");
// 同样道理,获取”百度一下“这个按钮
final HtmlSubmitInput button = form.getInputByValue("百度一下");
// 得到搜索框
final HtmlTextInput textField = form.getInputByName("q1");
// 最近周星驰比较火呀,我这里设置一下在搜索框内填入”周星驰“
textField.setValueAttribute("周星驰");
// 输入好了,我们点一下这个按钮
final HtmlPage nextPage = button.click();
// 我把结果转成String
String result = nextPage.asXml();
System.out.println(result);

