Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか
ブラウザの画面テストを自動化するツール、Selenium。
大変便利なツールなのですが、Selenium RC、Selenium IDE、WebDriverなど色々な名前が出てきて、「なぜこんなややこしいことになっているんだろうか」と思ったことはありませんか?
その理由を知るには、Seleniumの歴史について知る必要があります。
今回は、Seleniumの誕生から2013年5月現在に至るまでの歴史を振り返りながら、それぞれのツールがどのような位置付けのものなのか、見ていくことにしましょう。
※ 歴史はいいからとりあえずSeleniumを使ってみたい、という方は、Selenium公式サイトからSelenium IDEをダウンロードすれば使えます。
Selenium Core
Seleniumの原型は、米ThoughtWorks社で働いていたJason Huggins氏によって2004年に作られた、社内向けテストツールです。このツールが発展して、「Selenium Core」になりました※1。
Selenium Coreの基本的なアイデアは、Webサーバー上にSelenium Coreのエンジンとテストスクリプトを事前に配備しておき、ローカルPCからのアクセスを受けたときに、JavaScriptのブラウザ操作ロジックを埋め込んだページを返す、というものでした。(図1)
スクリプトは、HTMLの形式で、手作業で作成する必要がありました。
次に説明するSelenium RCやSelenium IDEの登場に伴い、Selenium Coreを単体で使用して自動テストを組む機会はほぼなくなりました。Seleniumの公式サイトでもSelenium Core単体のパッケージはもう配布されていません。
Selenium Coreのブラウザ操作ロジックは、Selenium RCやSelenium IDEの内部で現在でも使われています。そのため、Selenium Coreは「Selenium RCやSelenium IDEのコアコンポーネント」と説明されることが多いです。
Selenium RC (Remote Control)
続いて登場したのがSelenium RCです。Selenium RCは、Selenium Coreを「Webサーバー上にスクリプトを置かなくても利用できるようにしたもの」と考えればよいでしょう。(リモートPCでのSelenium実行ツールと誤解しそうな名前ですが、そうではありません)
Selenium RCでは、ローカルPC上で「Selenium Server」という中継サーバーを起動し、この中継サーバーがJavaScriptのブラウザ操作ロジックをWebページに埋め込みます。これにより、Webサーバー上へのスクリプトの配置は不要になりました。(図2)
また、HTMLに加え、Java・Ruby・Python・Perl・PHP・.Netといったプログラミング言語でもスクリプトを記述できるようになり、ループや条件分岐などを含むより高度なスクリプトの作成が可能になりました。
Selenium IDE
続いて登場したのは、日本の笠谷真也氏が開発した「Selenium IDE」です。
これは、ユーザーのブラウザ操作を記録して、そこからSeleniumのスクリプトを生成するFirefoxプラグインです。
Selenium IDEのおかげで、スクリプトをこれまでより簡単に作成できるようになりました。
さらに、Selenium IDEにはSelenium Coreのロジックが埋め込まれており、Firefox上でのテスト実行ならばSelenium RCがなくても行うことができます。
このような性質を持つため、Selenium IDEは、Seleniumの入門ツールとして、またプログラミング言語に不慣れなユーザーがSeleniumを使うためのツールとして、現在でも広く利用されています。
WebDriver
Seleniumが多くの人々に利用されるにつれて、次第にその問題点もクローズアップされるようになってきました。
特に問題だったのが、テスト実行時にJavaScriptを使ってブラウザを操作するために、ブラウザのセキュリティ制限によって多くの動作制約を受ける点です※2。
2006年、GoogleのSimon Stewart氏は、この問題を解決する新たなブラウザ自動テストツール、WebDriverの開発に着手しました。
WebDriverは、テスト実行時のブラウザ操作を、JavaScriptではなく、ブラウザの拡張機能やOSネイティブの機能を使って行う仕組みでした。(そのため、Selenium Serverのような中継サーバーも不要です)
この試みは成功し、やがてWebDriverはSeleniumと統合されることになります。
Selenium WebDriver
2011年7月、Selenium RCとWebDriverを統合した、Selenium WebDriverがリリースされました。
Selenium RCとWebDriverではコマンドの体系が全く異なっており、Selenium WebDriverにおいては、その両方を使用できます。
WebDriverのコマンドの方が多くの点で優れているので、今後はできるだけWebDriverのコマンドを利用する方がよいと思われます。※3
Selenium RCのコマンドでしか利用できないブラウザやプログラミング言語などもまだあるようですが、長期的にはこれらの問題は解消されていくと考えられます。
Selenium Builder
Selenium WebDriverがリリースされた現在でも、Selenium IDE上で扱えるコマンドはSelenium RCのものだけです。(WebDriverベースのスクリプトに変換して外部に出力することはできます。※4)
そのため、Selenium IDEでスクリプトを作成・管理しているユーザーは、今もWebDriverベースのスクリプトに完全に移行できていません。
こんな状況を改善してくれるかもしれない新ツールが、最近登場しました。その名を、Selenium Builderといいます。
Selenium Builderは、Selenium IDEのようにブラウザ操作を記録してスクリプトを生成するツールなのですが、完全にWebDriverのコマンドだけでブラウザ操作の記録・再生が可能です。
Selenium Builderは、Seleniumの生みの親であるJason Huggins氏がCTOを勤める、米Sauce Labsが中心となって開発をしており、現在も活発に開発が進められているようです。
もしかしたら、このツールもいずれ、Seleniumの新たな歴史の1ページに書き加えられることになるかもしれません。
その他の「Selenium~」
ここまでに登場しなかった、その他の「Selenium~」という用語について簡単に説明しておきます。
Selenium 1
Selenium RCのことです。
Selenium 2
Selenium WebDriverのことです。
Selenese
Selenium RCのコマンドのことです。
Selenium Grid
Selenium RCの時代に存在していた、複数のマシン上でSeleniumのテストを並列実行するためのツールです。現在はSelenium WebDriverにその機能は吸収されており、これ単体でダウンロードすることはできません。
おまけ - Seleniumダウンロードサイト解説
最後におまけとして、現在Seleniumの公式サイトからダウンロードできるもののうち、重要なものについて解説しておきます。重要なのは、
- Selenium Client & WebDriver Language Binding
- Selenium Server
- Selenium IDE
の3つです。
1. Selenium Client & WebDriver Language Binding
Selenium WebDriverの本体です。プログラミング言語でスクリプトを記述する場合に必要です。プログラミング言語ごとにパッケージが用意されているので、必要なものをダウンロードしましょう。
2. Selenium Server
Selenium RCのコマンドをSelenium WebDriverで実行する場合に、Selenium Client & WebDriver Language Bindingに加えて必要となる、ローカルPC上で起動する中継サーバーです。他にもいくつか使い道があるのですが、ここでは説明は割愛します。
3. Selenium IDE
ブラウザ操作を記録・再生できるFirefoxプラグインで、Selenium Client & WebDriver Language BindingやSelenium Serverがなくても利用できます。作成したスクリプトをSelenium WebDriverのスクリプトに変換することもできます。
とりあえずSeleniumを使いたいという方は、まずはこのSelenium IDEだけをダウンロードするとよいでしょう。
上記1.~3.の関係を表したのが下図です。
注釈・出典
- Brief History of The Selenium Project
- Brief History of The Selenium Project
- Why Migrate to WebDriver
- Selenium IDE and Selenium 2 / WebDriver