HtmlUnit測試頁面

HtmlUnit簡介:

引自 www.open-open.com
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的使用,也有着基本的套路,如下:


public void testHomePage() throws Exception {
		// 新建一個WebClient對象,此對象相當於瀏覽器
		final WebClient webClient = new WebClient();
		// 構造一個URL,指向需要測試的URL,如http://www.iteye.com
		URL url = new URL("http://www.iteye.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文檔。

 

超鏈接

// 或取一個<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這個對象,以及表單操作的相應方法:

 

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代碼來測試:

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測試代碼,則可以作爲自動化測試,不過不知道有沒有公司這麼幹的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章