【转】 HtmlUnit简介

article/2025/10/14 22:47:53

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.         // 获取首页   
  5.         final HtmlPage page1 = (HtmlPage) webClient.getPage("http://htmlunit.sourceforge.net");   
  6.   
  7.         // 根据form的名字获取页面表单,也可以通过索引来获取:page.getForms().get(0)   
  8.         final HtmlForm form = page1.getFormByName("myform");   
  9.         final HtmlSubmitInput button    
  10.             = (HtmlSubmitInput) form.getInputByName("submitbutton");   
  11.         final HtmlTextInput textField    
  12.             = (HtmlTextInput) form.getInputByName("userid");   
  13.   
  14.         // 设置表单域的值   
  15.         textField.setValueAttribute("root");   
  16.   
  17.         // 提交表单,返回提交表单后跳转的页面   
  18.         final HtmlPage page2 = (HtmlPage) button.click();   
  19.     }  
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.   
  5.         // assert whether Login successful, using user and password   
  6.         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测试代码,则可以作为自动化测试,不过不知道有没有公司这么干的。


http://chatgpt.dhexx.cn/article/ckCtpUUc.shtml

相关文章

HtmlUnit(Java) - 快速入门学习 - 无界面浏览器

文章目录 1. 概述2. 注意2.0 js解析问题2.1 关闭HtmlUnit日志 3. 使用3.1 抓取IT之家周榜内容 - 单页面3.2 抓取IT之家周榜第九篇文章的内容 - 双页面3.3 模拟用户操作 - &#xff08;这个功能个人感觉非常非常的鸡肋&#xff0c;只能用于非常简单的JS&#xff0c;但是一般网站…

【零基础】快速入门爬虫框架HtmlUnit

迅速的HtmlUnit htmlunit是一款开源的web页面分析工具&#xff0c;理论上来说htmlunit应用于网页的自动化测试&#xff0c;但是相对来说更多人使用它来进行小型爬虫的快速开发。使用htmlunit进行爬虫开发不仅是其运行速度快&#xff0c;更重要的是此框架上手更为容易&#xff0…

保研之路——哈深计算机预推免

哈深计算机预推免 个人情况高校复试参与情况哈工深计算机学院直硕&#xff08;7.20&#xff09;结语 嗯&#xff01;抱着不白花这么多路费住宿费的初衷准备写一个保研经验贴&#xff0c;希望学弟学妹少花点钱吧orz 我的战术大概是只要学校给我发了邀请我就去&#xff08;除了时…

哈工大计算机学院统一复试划线,哈工大计算机专业,复试比例101%,擦线党没戏了...

原标题&#xff1a;哈工大计算机专业&#xff0c;复试比例101%&#xff0c;擦线党没戏了 这几天哈工大各院系公布了复试线及复试名单&#xff0c;其中「计算机学院」的复试考生比例居然是101%。 哈工大2020年计算机专业的考研复试线为320分(学术学位)&#xff0c;以及专业学位的…

【2024考研】哈工大计算机考研854会改成408吗?优缺点分析?怎么复习?哈工大卓越工程师学院点击就送吗?

文章目录 1.哈工大计算机考研专业课的发展历史2.哈工大卓越工程师学院点击就送吗&#xff1f;3.哈工大计算机854会改成408吗&#xff1f;4.哈工大计算机854的优缺点分析4.1 优点4.2 缺点 5.哈工大计算机854怎么复习&#xff1f;5.1 计算机系统(CSAPP)复习指导5.2 计算机网络复习…

【考研】哈尔滨工业大学计算机考研854复习资料

哈尔滨工业大学计算机考研854复习资料 0. 考研初试&复试经验贴1. 初试专业课复习资料资源1.1 复习资料下载1.2 复习资料清单 2. 初试专业课复习资料使用指南2.1 CSAPP资料2.2 数据结构资料2.3 计算机网络资料 更新历史&#xff1a; 2022年4月22日完成初稿2022年5月7日加入…

计算机排名哈工大第三,国内计算机高校排名:哈工大稳坐第2,浙江大学第3,西电第8...

QS世界大学计算机H指数(H指数为混合量化指标&#xff0c;可用于评估研究人员的学术产出量和学术产出水平)前50名中&#xff0c;中国有9所(包括香港大学3所)上榜&#xff0c;前100名中有清华大学、哈工大学、浙江大学等14所世界一流大学建设高校&#xff0c;学校有西安电子科技大…

哈工大深圳计算机就业质量报告,多所高校公布毕业生平均年薪,南京大学和哈工大(深圳)数据亮眼...

原标题:多所高校公布毕业生平均年薪,南京大学和哈工大(深圳)数据亮眼 对于高中学子而言,在将来报考大学时,除了根据自己的兴趣爱好之外,还比较关注对应高校的就业率以及就业质量。毕竟将来大学毕业后还是要走向社会就业的。所以就业后的薪资待遇就成了大家乐意关注的一个点…

哈工大2021秋机器学习期末试题

哈工大2021秋机器学习期末试题 刚刚经历了机器学习复习和考试&#xff0c;这过程简直是太折磨了。 这门课的期末考试往年题还是很有参考价值的。所以我在考试的时候抽了点时间把期末题记了一下&#xff0c;希望能对学弟、学妹&#xff08;如果有的话&#xff09;考前复习有所…

哈尔滨工程大学计算机学院保研政策,哈工大保研条件(哈工大2019保研政策)

哈工大保研条件(哈工大2019保研政策) 2020-05-08 10:50:43 共10个回答 去年保研的确实增加了,主要是总校的增加了(40%多),深圳和威海的基本上变化不大,保研率没有超过40%.但是值得特别注意的是,复试中取消了前25%免除笔试的原则.以至于好多总校和威海前25%的同学虽进入复试,却因…

2020哈工大(威海)计算机夏令营面试

2020哈工大威海计算机夏令营面试 6月底收到哈工大(威海)的入营通知&#xff0c;当时我正在参加中南大学的夏令营&#xff0c;因为我校往届也有好多学长学姐保研到哈威&#xff0c;所以入营概率相对较大&#xff0c;也算是我夏令营拿到的为数不多的入营&#xff0c;另外三个分别…

哈工程计算机系保研率,武汉理工VS哈工程,20保研率哈工程高,哪所值得考?学长精准分析...

对于国内的很多工科高校&#xff0c;由于主打的专业都是国民经济不可或缺的专业&#xff0c;但由于近几年实体经济不景气&#xff0c;很多考生都转而报考计算机相关专业、财经类专业&#xff0c;以前很吃香的航空航天类、电气类、材料类专业都不再受热捧&#xff0c;但这类学校…

哈师大计算机学院宿舍,新生攻略|哈师大所有的“秘密”都在这了

原标题:新生攻略|哈师大所有的“秘密”都在这了 你好,我是哈师大17级的新生,我想全面的了解一下咱们学校,应该去哪了解呀? 这你可算是问对人了,听说最近哈尔滨师范大学学生会的官方微信平台出了非常全的新生攻略呢,快关注它们的公众号(hsdxsh)看看吧! 哇!这么棒!我要…

2020哈工程上岸初复试经验

2020哈工程上岸初复试经验 写在前面&#xff1a; 2020年注定是在研究生考试中被记住的一年&#xff0c;这一年考研的同学们都经历了太多的考验&#xff0c;有幸运的&#xff0c;也有不幸的。经过了漫长的等待&#xff0c;终于&#xff0c;拟录取名单下来了&#xff0c;我也很幸…

2019哈工大计算机考研复试,哈工大计算机专业,复试比例101%,擦线党没戏了...

这几天哈工大各院系公布了复试线及复试名单&#xff0c;其中「计算机学院」的复试考生比例居然是101%。 哈工大2020年计算机专业的考研复试线为320分(学术学位)&#xff0c;以及专业学位的电子信息&#xff0c;也是320分&#xff0c;哈工大公布的校线也是这个分数&#xff0c;院…

哈工大计算机报深圳还是本部,哈工大本部和哈工大深圳哪个比较好?

眼下各省市的高考成绩陆续公布&#xff0c;考生和家长们进入了填报志愿的关键时期&#xff0c;这个时候我们会发现一个问题&#xff1a;有些学校会有很多分校或分校区&#xff0c;比如东北大学和东北大学秦皇岛分校、山东大学和山东大学威海校区等&#xff0c;这些校区和分校跟…

哈工程和杭电计算机,哈工程算名校吗?为什么说千万别来哈工程?

选择科目 测一测我能上哪些大学 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> “哈工程”一般指哈尔滨工程大学&#xff0c;这是一所直属国家工业和信息化部&#xff0c;和教育部、黑龙江省、哈尔滨市共建的全国重点大学。网上有说法是“千万别来哈工程…

RHCE第三次作业

综合练习&#xff1a;请给openlab搭建web网站 ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载本地光盘 mount: /mnt: /dev/sr0 already mounted on /run/media/zhou2002/RH…

c++的unsigned int和int类型

就如同int a&#xff1b;一样&#xff0c;int 也能被其它的修饰符修饰。除void类型外&#xff0c;基本数据类型之前都可以加各种类型修饰符&#xff0c;类型修饰符有如下四种: 1.signed----有符号&#xff0c;可修饰char、int。Int是默认有符号的。 2.unsigned-----无符号&…

char 和 unsigned char 的区别

一.基本原理 1、char取值范围是 -128~127。 2、我们先来看 signed char的最大值。 最高位是 符号位&#xff0c; 0 代表正数&#xff1b; 1 代表负数。0 1 1 1 1 1 1 1 这个值等于 2^0 2^1 2^2 2^3 2^4 2^5 2^6 127 。 也有一个简便计算方法&#xff1a…