HtmlUnit简介:

引自 http://www.javaeye.com/topic/166702
HtmlUnit 是 JUnit 的扩展测试框架之一。HtmlUnit 将返回文档模拟成 HTML,这样您便可以直接处理这些文档了。HtmlUnit 使用例如 table、form 等标识符将测试文档作为 HTML 来处理。它同样需要遵循 JUnit 测试框架结构的 Java™ 测试程序。

我们可以在http://htmlunit.sourceforge.net/上面下载HtmlUnit,最新版本是1.4。

解压后将lib目录下面的jar文件放入工程的classpath就可以使用了。

基本套路

对于一些开源框架的使用,都有一定的基本套路,对于HtmlUnit,由于是对JUnit的扩展,当然,也需要继承自TestCase,并且也可以Override相应的setUp()和tearDown()方法。对于HtmlUnit的使用,也有着基本的套路,如下:

Java代码
  1. public void testHomePage() throws Exception {
  2. // 新建一个WebClient对象,此对象相当于浏览器
  3. final WebClient webClient = new WebClient();
  4. // 构造一个URL,指向需要测试的URL,如http://www.javaeye.com
  5. URL url = new URL("http://www.javaeye.com");
  6. // 通过getPage()方法,返回相应的页面
  7. HtmlPage page = (HtmlPage) webClient.getPage(url);
  8. // System.out.println(page.getTitleText());
  9. assertEquals(
  10. "JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区",
  11. page.getTitleText());
  12. }
public void testHomePage() throws Exception {
// 新建一个WebClient对象,此对象相当于浏览器
final WebClient webClient = new WebClient();
// 构造一个URL,指向需要测试的URL,如http://www.javaeye.com
URL url = new URL("http://www.javaeye.com");
// 通过getPage()方法,返回相应的页面
HtmlPage page = (HtmlPage) webClient.getPage(url);
// System.out.println(page.getTitleText());
assertEquals(
"JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区",
page.getTitleText());
}

WebClient对象提供了一系列涉及到浏览器的方法,比如像

setThrowExceptionOnScriptError(false|true)-是否抛出页面javascript错误

setThrowExceptionOnFailingStatusCode(false|true)-是否抛出response的错误

HtmlPage对应页面,getTitleText()返回页面的title。

执行测试,就会看到我们所喜爱的绿条。

HtmlUnit的页面组件

像上面的HtmlPage,HtmlUnit中定义了许多页面组件对象,像HtmlForm对应Form表单,HtmlImage对应页面中的img标签, HtmlInput对应页面中的input标签,HtmlAnchor对应页面中的超链接,页面中的每一个标签,HtmlUnit都会有相对应的对象,具体的,可以参看随HtmlUnit下载的doc文档。

超链接

Java代码
  1. // 或取一个<a>的超链接
  2. //HtmlAnchor anchor = (HtmlAnchor) page.getAnchorByName("welcome");
  3. page = (HtmlPage) page.getAnchorByName("welcome").click();
  4. String pageContent = page.getWebResponse().getContentAsString();
  5. System.out.println(pageContent);
// 或取一个<a>的超链接
//HtmlAnchor anchor = (HtmlAnchor) page.getAnchorByName("welcome");
page = (HtmlPage) page.getAnchorByName("welcome").click();
String pageContent = page.getWebResponse().getContentAsString();
System.out.println(pageContent);

Form提交

只是简单的测试一个页面的title,当然无法满足需求,对于WEB应用,有着大量的表单,所以HtmlUnit提供了HtmlForm这个对象,以及表单操作的相应方法:

Java代码
  1. public void testHomePage() throws Exception {
  2. final WebClient webClient = new WebClient();
  3. // 获取首页
  4. final HtmlPage page1 = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");
  5. // 根据form的名字获取页面表单,也可以通过索引来获取:page.getForms().get(0)
  6. final HtmlForm form = page1.getFormByName("myform");
  7. final HtmlSubmitInput button
  8. = (HtmlSubmitInput) form.getInputByName("submitbutton");
  9. final HtmlTextInput textField
  10. = (HtmlTextInput) form.getInputByName("userid");
  11. // 设置表单域的值
  12. textField.setValueAttribute("root");
  13. // 提交表单,返回提交表单后跳转的页面
  14. final HtmlPage page2 = (HtmlPage) button.click();
  15. }
public void testHomePage() throws Exception {
final WebClient webClient = new WebClient();
// 获取首页
final HtmlPage page1 = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");
// 根据form的名字获取页面表单,也可以通过索引来获取:page.getForms().get(0)
final HtmlForm form = page1.getFormByName("myform");
final HtmlSubmitInput button
= (HtmlSubmitInput) form.getInputByName("submitbutton");
final HtmlTextInput textField
= (HtmlTextInput) form.getInputByName("userid");
// 设置表单域的值
textField.setValueAttribute("root");
// 提交表单,返回提交表单后跳转的页面
final HtmlPage page2 = (HtmlPage) button.click();
}

表单的提交,超链接的跳转,都是通过click()方法,既通过鼠标点击事件触发的。它们都可以返回相应的HtmlPage对象,然后通过HtmlPage 对象的相应方法来测试,其实,HtmlPage对象,就是包装了页面Html的一个对象,可以通过page.getWebResponse(). getContentAsString()直接返回页面的html代码,然后通过HTML代码来测试:

Java代码
  1. String pageContent = page.getWebResponse().getContentAsString();
  2. System.out.println(pageContent);
  3. int indexInt = pageContent.indexOf(WELCOME);
  4. // assert whether Login successful, using user and password
  5. assertTrue(indexInt != -1);
String pageContent = page.getWebResponse().getContentAsString();
System.out.println(pageContent);
int indexInt = pageContent.indexOf(WELCOME);
// assert whether Login successful, using user and password
assertTrue(indexInt != -1);

页面中的javascript

对于页面中的javascript,HtmlUnit并没有太好的测试方法,也只能通过相应的ScriptEngine来处理。

对于HtmlUnit,个人感觉实用性并不太大。当然,如果有专人写HtmlUnit测试代码,则可以作为自动化测试,不过不知道有没有公司这么干的。

【转】 HtmlUnit简介相关推荐

  1. Java --- HtmlUnit 简介

    一.简介 是一款开源的 Java 页面分析工具,读取页面后,可以有效地使用 htmlunit 分析页面上的内容 可以模拟浏览器运行,被誉为 Java 浏览器的开源实现 1.是一个无界面浏览器 Java ...

  2. HtmlUnit简介

    htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.是一个没有界面的浏览器,运行速 ...

  3. 使用HtmlUnit获取html页面

    https://blog.csdn.net/johnson_moon/article/details/78457543 HtmlUnit简介 官网介绍 HtmlUnit is a "GUI- ...

  4. HtmlUnit学习总结

    本文摘抄其他博客或者技术论坛,自己搜集整理如下: HtmlUnit学习总结 摘要 htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目 ...

  5. (一)问候 HtmlUnit

    第一节: HtmlUnit 简介 htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实 ...

  6. 浅谈HtmlUnit

    最近学习了HtmlUnit,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用 文章目录 一 HtmlUnit简介 二 模拟百度搜索 三 总结 一 HtmlUnit简介 H ...

  7. Java爬虫学习:使用HtmlUnit获取html页面

    使用HtmlUnit获取html页面 HtmlUnit简介 官网介绍 HtmlUnit is a "GUI-Less browser for Java programs". It ...

  8. JUnit 实战第二版 中文目录

    第1部分 认识JUnit 28 第1章 JUnit起步 30 1.1   证实它能运行 31 1.2   从零开始 33 1.3   理解单元测试框架 35 1.4   JUnit的设计目标 36 1 ...

  9. JAVA抓取通过JS渲染的网站(动态)网页数据

    使用HtmlUnit获取html页面 HtmlUnit简介 官网介绍 HtmlUnit is a "GUI-Less browser for Java programs". It ...

最新文章

  1. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验
  2. Command_Of_Windows1
  3. Centos 7 安装LAMP环境
  4. 如何用matlab求方程的整数解
  5. 消息队列MQ/JMS/Kafka,你都了解多少?
  6. 网络爬虫:采用“负载均衡”策略来优化网络爬虫
  7. C标准中一些预定义的宏,如__FILE__,__func__等
  8. Android 之一 Android Studio 安装、配置等新手入门 + 百度地图定位 + 移动摇杆 的实现
  9. 深入理解Linux IO复用之epoll
  10. SQL之用户自定义函数
  11. PHP个人博客项目------切切歆语博客
  12. python try expect 多个except3.7_python try小例子
  13. LaTeX中添加\usepackage{subfigure}一直报错的解决办法,亲测
  14. mysql实现主从复制
  15. 工业互联网联盟发布工业物联网安全框架
  16. 前端组件化思想与实践
  17. 在线支付接口详解、支付接口对接
  18. day002-2019-07-30
  19. 英语语音篇 - 自然拼读大全
  20. 【20210823】学习本不应该痛苦人生其实是一种享受

热门文章

  1. Explaining Knowledge Graph Embedding via Latent Rule Learning
  2. 二叉树的前序遍历-python
  3. 基于Java语言的语法分析器
  4. 使用STM8单片机+NTC热敏电阻自制简易温度巡检仪
  5. Android使用MediaCodec和OpenGL对多段视频画面进行裁剪和拼接
  6. Hive MetaStore服务增大内存
  7. 计算机图形学笔记 || 自由曲线和曲面
  8. 电脑android模拟器下载地址,菜鸡电脑版怎么下载 安卓模拟器电脑版下载地址
  9. __align的用法
  10. spark使用supervisor守护进程