Web アプリケーションの自動テストツール「WebDriver」に関するメモ。
WebDriver とは
WebDriver は、オープンソースソフトウェアとして開発されている Web アプリケーションの自動テストツールである。 同じくオープンソースの Web アプリケーションの自動テストツール「Selenium」とプロジェクトがマージされ、 Selenium 2.0 の一部となった。 2011/07/08 に初のリリース版として Selenium 2.0.0 が公開された。
WebDriver (Selenium 2.0) のダウンロードとインストールについては 「インストール」 ページを参照。
用語
- Selenium
- 自動テストツールのプロジェクトの名前
- Selenium 1.0
- 2009年6月にリリースされたバージョン。Selenium-IDE、Selenium-RC、Selenium-Grid の 3 つのコンポーネントからなる。
- Selenium 2.0
- 2011年7月にリリースされたバージョン。Selenium 1.0 の機能に WebDriver の機能が追加される。
- Selenium-IDE
- Firefox のアドオン。Web アプリケーションに対するユーザ操作を記録し、Selenium テストとして保存・再生する。
- Selenium-RC
- サーバ・クライアント型のテスト実行ツール。複数のブラウザと複数のプログラミング言語に対応する。 Selenium 1.0 の実装では Web アプリケーションに対するプロキシサーバとして動作し、ページに JavaScript を埋め込むことで動作する。
- Selenium-Grid
- 複数の環境で同時にテストを実行できるツール。ハブに送られたテストは Selenium-RC にリダイレクトされて実行される。
- WebDriver
- サーバ・クライアント型のテスト実行ツール。複数のブラウザと複数のプログラミング言語に対応する。 各ブラウザの提供する機能を呼び出して自動操作を実現する。
Selenium 1.0 と比較した WebDriver のメリット
- プロキシサーバとしての制限を受けない
- Selenium 1.0 はプロキシサーバとして動作するため、ドメインをまたがったテストはできなかった。 また、条件によっては Alert ダイアログを認識できず、ユーザが手でダイアログを閉じるまでテストの実行が止まってしまうという問題があった。 WebDriver はプロキシサーバではなく直接ブラウザの機能を使うため、このような制限を受けにくい。
- シンプルな API
- Selenium 1.0 のコマンド は「command/target/value」の 3 つ組となっており、アサーションなども含めて 140 種類のコマンドが定義されていた。 WebDriver API は「要素を検索する」「クリックする」など粒度が細かくなっており、クライアント側でできる処理は省かれている。 WebDriver API のコマンド は 68 種類に抑えられている。
JsonWireProtocol
WebDriver の本質はサーバ・クライアント間のプロトコルにある。 このプロトコルは http://code.google.com/p/selenium/wiki/JsonWireProtocol で定義されている。 各ブラウザ向けの WebDriver は、JsonWireProtocol のメッセージを受けて対応する動作を行うように実装される。 また、各プログラミング言語向けの API は、それぞれのプログラミング言語の流儀にしたがって定義され、 JsonWireProtocol のメッセージを送信するように実装される。
Selenium-RC 1.0 の 通信プロトコル は、command、target、value をそのままクエリとして送信するというシンプルなものだった。 Selenium 2.0 では、クライアント側で Selenium コマンドを WebDriver API に変換 して JsonWireProtocol を送信できるようになっている。
Java API
WebDriver の Java API は、 WebDriver クラス と WebElement クラス を中心に構成されている。 WebDriver クラスを通してブラウザを操作し、WebElement クラスを通して任意の DOM 要素を操作できるようになっている。 例えば、www.google.com を開いて「WebDriver」を検索するテストは次のように書ける。
WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("WebDriver"); element.submit();
この例では、WebDriver を使って特定の URL を開いて要素を検索し、WebElement を使って文字列を入力している。
対応ブラウザ
- HtmlUnit
- Firefox
- Internet Explorer
- Chrome
- Opera(Opera Softwareが開発し、Selenium 2 に統合された。)
- Android Browser
- iPhone Safari
対応言語
関連ページ
関連リンク
- http://code.google.com/p/selenium/
- http://seleniumhq.org/docs/03_webdriver.html
- http://journal.mycom.co.jp/articles/2009/05/26/webdriver/index.html
- http://jbsdev.blog26.fc2.com/blog-entry-225.html
更新履歴
- 2011/07/09: 「インストール」ページ追加。
- 2011/07/08: Selenium 2.0.0 がリリースされた。
- 2011/07/06: Java API セクションを追加。
- 2011/07/04: 初版作成。