Selenium チームは先日,Selenium 2.0 (別名 Selenium WebDriver) をリリースした。Selenium は評価の高い Web アプリケーション用テストフレームワークだ。多くのブラウザで動作し,数々のプログラム言語を使用したテスト開発に対応する。Selenium 2 で最大の新機能は,Selenium 1 (別名 Selenium RC) と競合する Web アプリケーションテストフレームワークであった WebDriver を統合したことだ。Selenium RC がブラウザ内で JavaScript アプリケーションを実行するのに対して,WebDriver はネイティブなブラウザ機能あるいはブラウザ拡張を用いて,ブラウザを直接コントロールする。
Selenium プロジェクトの記録資料に見られるように,Selenium と WebDriver の開発者たちは互いにそれぞれのツールの長所を認めて,2つをマージすればさらに強力な Web テストフレームワークを作ることができる,という考えを持っていた。Selenium 1 は定評のあるテストフレームワークで人気もあり,各種のブラウザで動作可能なインターフェースを JavaScript で実装する。テストの記述に使用できる言語も (Java や C# から,PHP,Erlang に至るまで) 多い。一方の WebDriver は,JavaScript サンドボックスの外部で動作する機能や,高速軽量で汎用的なブラウザエミュレータの提供などにより,Selenium 1 の持つ主要な欠点に対処する。WebDriver の作者である Simon Stewart 氏は,2つのプロジェクトを統合する理由について,2009 年8月に WebDriver と Selenium の両コミュニティに宛てた連名の電子メールで説明している。
プロジェクトを統合する理由ですか? ひとつには WebDriver が Selenium の欠点を補っている (JS サンドボックスを回避する機能,優秀な API など) ため,もうひとつは Selenium が WebDriver の欠点を補っている (広範なブラウザのサポートなど) ためです。Selenium の中心的な貢献者たちと私は,それが最高のフレームワークを提供するための最善な方法だと考えたのです。
Selenium 2 には Selenium Server も同梱されていて,Selenium Grid による分散テスト環境を実現する。この新しい Selenium Grid では,オリジナルの Selenium RC API を用いたテストと,新しい WebDriver API によるテストがどちらもサポートされる。Selenium IDE 1.1.0 にも WebDriver API がサポートされる予定で,WebDriver がサポートするすべてのプログラミング言語 (Ruby,Python,C#,Java) でのエクスポートが可能になる。ただし残念ながら,これは Selenium IDE のメインブランチにおいて Groovy や Perl,PHP などのプラグインが公式に非推奨となった,という意味でもある。
WebDriver は各ブラウザに対応したものが開発され,Web アプリケーションテスト時に組み込まれる JavaScript を置き換える。ブラウザとの結合度の向上によって,より高度なテストの作成が可能になり,JavaScript セキュリティモデルに存在する制限が取り除かれる。さらにブラウザベンダによるサポート範囲を越えて OS コールも利用した,ユーザ入力エミュレーション機能も備えている。WebDriver は Firefox (FirefoxDriver),IE (InternetExplorerDriver),Opera (OperaDriver),Chrome (ChromeDriver) をサポートする。技術的な制限のため,今回のリリースでは Safari がサポートされないが,SeleneseCommandExecutor を使用してエミュレートすることは可能だ。モバイル Web アプリケーションのテストのために Android (AndroidDriver) や iPhone (IPhoneDriver) も対象となっている。さらに対象を特定していない,HtmlUnit ベースの HtmlUnitDriver という実装もある。API は Python,Ruby,Java,C# からアクセス可能なので,開発者は好みのプログラミング言語を使ってテストを記述することができる。
Selenium の前回の安定版リリースは,2010年2月にリリースされた Selenium 1.0.3 だ。Selenium 2 は Selenium 1 と後方互換性を持っているが,新たに Selenium を使用するのであれば,新しい WebDriver API を用いた方がよいだろう。Selenium 2 は Selenium RC API 以外にも,WebDriver API 配下の Selenium RC テクノロジをサポートする。Selenium 1 のサポートは継続され,現在 Selenium 2 では利用できないいくつかの機能を提供する。そこには JavaScript,PHP,Perl などの言語サポートや,JavaScript をサポートする他のブラウザサポートなども含まれる。既存の Selenium テストをアップグレードする場合は,Migrating from Selenium RC to Selenium WebDriver が参考になるだろう。
Selenium 1 と WebDriver の統合を決定してから Selenium 2 のリリースまで,約2年を費やしている。InfoQ はその理由を Simon Stewart 氏に聞いた。
よい質問ですね。思い当たる理由はたくさんありますが,私たちが納得できるまで 2.0 をリリースしなかった,という点が大きかったのだと思います。つい最近まで,WebDriver API は完全に熟成されたものではありませんでした。リリース候補版を見てもらえれば,いくつかのメソッドが非推奨とされ,その後で削除されていることが分かると思います。調査や評価の必要な未解決の問題も,山のようにありました。ここ数カ月の私はほとんど,新しい問題よりも WebDriver の安定化と問題点の解決に取り組んでいました。2.0 がバグフリーにならないことは分かっていましたが,できる限り安定していて,効率的で,気分のよいものにしたいと思ったのです。
Selenium 2 と WebDriver に関するさらに詳しい情報については,Selenium 2.0 and WebDriver にある Selenium の資料や WebDriver FAQ などを参照してほしい。