Login  |  繁體中文
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
Previous Issue

HTMLUnit

Java Opensources for Web Development Part I:

Chapter 4 在 Java 中進行各種單元測試
Lession 16 : HTMLUnit

* Category: Test
* Project Name: HTMLUnit
* WebSite: https://htmlunit.sourceforge.net/
* License: Apache-like  https://htmlunit.sourceforge.net/license.html
* Last version: 1.11 (2007/04)

我們在開發 Web 的時候,必要時,對於網頁的操作,總不能每次都以人工點選操控瀏覽器,進行部署後的測試,所以我們需要 HTMLUnit 來解決這個問題。 其實也有一個很雷同的 opensource,名叫 HttpUnit,只是 HttpUnit 著重於 Http 通訊協定的運用,如果要針對 form 與 table 等網頁元件處理,使用 HTMLUnit 會比較輕鬆。

例如我們要確認網頁的標題<title>是否正確,首先先建立一個 WebClient 就是視為一個瀏覽器,接著透過 WebClient 進行遠端 URL 存取取得一個頁面,再針對該頁面  getTitleText() 取得標題,最後利用 assertEquals 來判斷字串是否如同預期。

package com.softleader.unittest.htmlunit;

import java.net.URL;

import junit.framework.TestCase;

import org.junit.Test;
import org.junit.Assert;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class HtmlUnitSample extends TestCase {

 @Test
 public void testSoftleaderTitle() throws Exception{  
     final WebClient webClient = new WebClient();
     final URL url = new URL("https://www.softleader.com.tw");
     final HtmlPage page = (HtmlPage)webClient.getPage(url);

     assertEquals( "::::::::::::松凌科技::::::::::::", page.getTitleText() );
    
 }
}

當 test 出現綠燈,那麼就算是正確。

{mosimage}

主要來說,HTMLUnit 還可以模擬各種不同的瀏覽器,如果要專測某種瀏覽器,就是在建立 WebClient 之時,利用 new WebClient(BrowserVersion.MOZILLA_1_0),或是BrowserVersion.NETSCAPE 等等的方式進行。

當然,HTMLUnit 也可以設定 proxy Server,因為畢竟有些公司內部一定要透過 proxy 才能存取網頁,此外,也支援 keyboard 的操控,例如 tab 在 HTML 之中是以 tabindex 來進行順序排列,就可以用 call HtmlPage.tabToNextElement() 或是 HtmlPage.tabToPreviousElement() 來進行前後控制。或是使用HtmlPage.pressAccessKey(char)。直接透過 html accesskey 的屬性來測試控制的。

有時候,我會利用 HTMLUnit 來設計抓網頁欄位數值的內容,只需要利用 HTMLTable 與 HtmlTableRow 加上 HtmlTableCell,就可以把一個表格之中的某個數值抓取出來作其他判斷。不過,雖然現在也有內建 mozilla 的 js.jar,但是在 javascript 運作,IE 與 firefox 也有所不同,所以往往會發生 javascript 無法解析。這部分的情況,我通常會移除 js.jar,讓 javascript disabled ,否則衍生性的問題將會更多。當然,如果都利用標準 javascript 語法撰寫的網頁,可以利用之來處理 javascript 事件,甚至監控 alert 的訊息,倒是蠻方便的。




OSSF Newsletter : 第 78 期 新酷音輸入法 Windows 版

Category: Tech Column