HtmlUnit使用教程
HtmlUnit簡介:
我們可以在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.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文檔。
超鏈接
// 或取一個<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測試代碼,則可以作為自動化測試,不過不知道有沒有公司這么干的。