HtmlUnit

1月 1, 2003 · Posted in HtmlUnit · Comment 

HtmlUnitとは

HtmlUnitはWEBベースのアプリケーションをテストするためのフレームワークである。HtmlUnitは汎用的なテスティングフレームワークではなく、用途は限定的(Webブラウザをエミュレートする)である。
HttpUnitと類似しており、目的は同じだが実装が違うので開発者の好みやプロジェクトに適している方を選択するのがよい。

HttpUnitはHttpプロトコルを意識して作られているため、Httpリクエスト/Httpレスポンスを表すオブジェクトを利用する。対してHtmlUnitは、Htmlドキュメントを意識して作られており、Htmlドキュメントを表すオブジェクトを利用する。

入手

オフィシャルサイト(http://htmlunit.sourceforge.net/)から入手。

利用

テストクラスはJUnitで記述する。

public class SampleTest extends TestCase{

}

単純なリクエスト-レスポンス

public void testSimple() throws Exception {
    WebClient webClient = new WebClient();
    HtmlPage page = (HtmlPage)webClient.getPage(new URL("http://www.google.co.jp/"));
    assertEquals("Google", page.getTitleText());
}

http://www.google.co.jpにアクセスし、取得したHTMLドキュメントのタイトル(<title>〜</title>)を比較している。

ブラウザのバージョンを指定

public void testBrowserVersion() throws Exception {
    WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_6_0);
    HtmlPage page = (HtmlPage)webClient.getPage(new URL("http://www.google.co.jp/"));
    assertEquals("Google", page.getTitleText());
}

http://www.google.co.jpにアクセスする。その際にブラウザのバージョンをInternetExplorerとしてリクエストを行う。他にもMozilaやNetScapeなどが利用できる。

Proxyの利用

public void testHomePageUseProxy() throws Exception {
    WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_6_0,
                                        "http://myproxyserver",
                                        8000);
    HtmlPage page = (HtmlPage)webClient.getPage(new URL("http://www.google.co.jp/"));
    assertEquals("Google", page.getTitleText());
}

Proxyサーバーを通してのHttpアクセスを利用する場合は、WebClientの初期化時に情報を設定する。

formの送信

public void testHomePageSubmitForm() throws Exception {
    WebClient webClient = new WebClient();
    HtmlPage page1 = (HtmlPage)webClient.getPage(new URL("http://www.google.co.jp/"));
    HtmlForm form = page1.getFormByName("f");
    HtmlSubmitInput button = (HtmlSubmitInput)form.getInputByName("btnG");
    HtmlTextInput textField = (HtmlTextInput)form.getInputByName("q");
    textField.setValueAttribute("java");
    HtmlPage resultPage = (HtmlPage)button.click();
    System.out.println(resultPage.getTitleText());
    System.out.println(resultPage.getPageEncoding());
}

Formの送信を行う。上記の例ではhttp://www.google.co.jpにアクセス後、テキストボックスにjavaと入力してボタンをクリックしている。

リンク