【转】 HtmlUnit简介

HtmlUnit简介:

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测试代码,则可以作为自动化测试,不过不知道有没有公司这么干的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值