WebDriverの様々な機能

WebDriverには様々な便利機能がある。ここではそれらの一部を紹介しておこう。

クッキー

WebDriverではクッキーの設定・取得もサポートされている。以下のようなコードでドライバーへのクッキーの設定・取得を行うことが可能だ。

// クッキーの設定
Options options = driver.manage();
options.addCookie(new Cookie("key", "value"));

// クッキーの取得
for(Cookie cookie: options.getCookies()){
  System.out.println(String.format("%s=%s",
    cookie.getName(), cookie.getValue()));
}

JavaScriptの実行

executeJavaScriptメソッドで任意のJavaScriptを実行することもできるため、JavaScriptのテストを行うことが可能だ。

// JavaScript関数を呼び出し結果を取得
Object result = driver.executeJavaScript("return calc();");

ただし、Java側で結果として受け取ることができるのは以下の型に限られる。下記以外のオブジェクトについては文字列として返却される。また、戻り値がない場合はnullが返却される。

  • HTML要素(WebElement)
  • 数値(Long)
  • 真偽値(Boolean)
  • 文字列(String)
  • 配列(List)

フレーム、ウィンドウ

1つのブラウザでフレームを使ったり、複数のウィンドウを開くアプリケーションをテストするためのメソッドも用意されている。

// フレームのドライバーを取得
WebDriver menuFrameDriver = driver.switchTo().frame("menu");

// 子ウィンドウのドライバーを取得
WebDriver subWindowDriver = driver.switchTo().window("subwindow");

このようにして取得したドライバーを用いることでフレームやサブウィンドウ内のコンテンツに対して通常のドライバーと同じように操作を行うことができる。

スクリーンキャプチャ

ドライバーのAPIはWebDriverインタフェースで定義されているが、特定のブラウザでのみ利用可能なドライバー固有のメソッドも存在する。たとえばFirefoxDriverでは以下のようにすることでスクリーンショットをPNGファイルに保存することができる。テストのエビデンス(証跡)を残さなければいけない場面などで活用できるのではないだろうか。

FirefoxDriver driver = new FirefoxDriver();
...
// スクリーンショットをPNGファイルに保存
driver.saveScreenshot(new File("test.png"));

まとめ

WebDriverは非常に簡単なAPIでWebブラウザを操作することができる。JUnitのテストケースに組み込むことでWebアプリケーションのUIテストを容易に自動化することができるだろう。また、テストだけでなく、Webブラウザを使用した定型的な操作を自動化するためのツールとして使用することもできそうだ。

本稿ではJavaのAPIのみを取り上げたが、Pythonバインディングも用意されており、他の言語向けのバインディングも計画されているとのこと。WebDriverは将来的にSeleniumに組み込まれることになっており、今後に期待できるライブラリだ。