Seleniumでもまじめに触ってみようかと、http://seleniumhq.org/に昨日アクセスしたら
いつのまにかバージョンが2になってた。
Selenium1のときは、IDEもテストケースも馴染みにくい雰囲気で、個人的にずっと使う気になれなかったんだけど、"Selenium2"でググると結構評判が良かったので、当初の意気込みよりもハイテンションで触ってみた。
以下、作業ログ。
Selenium Serverをダウンロード
% curl -O http://selenium.googlecode.com/files/selenium-server-standalone-2.15.0.jar
2012年1月2日時点の最新版は2.15.0です。
Selenium Serverをスタンドアローンモードで起動
% java -jar selenium-server-standalone-2.15.0.jar
起動モードは、gridとstandaloneの2タイプあります。
gridはstandaloneで起動した複数サーバーを中央集権で管理するモードで、同時に複数プラットフォーム・複数ブラウザでテストを実行したいときに使います。
Selenium Clientの準備
Selenium Clientを書く言語として、公式だとJava, C#, Ruby, PHP, Pythonが提供されています。
サードパーティ製でPerlも用意されているので、今回僕はPerlで作成しました。
#!/opt/local/bin/perl use strict; use warnings; use utf8; use Selenium::Remote::Driver; use Test::More tests => 3; my $driver = Selenium::Remote::Driver->new( browser_name => 'firefox', ); { $driver->get('http://www.google.com'); my $title = $driver->get_title; cmp_ok($title, 'eq', 'Google', 'Test: $title eq "Google"'); } { my $elem = $driver->find_element('gb_2', 'id'); $elem->click(); my $title = $driver->get_title; cmp_ok($title, 'eq', 'Google 画像検索', 'Test: $title eq "Google 画像検索"'); } { my $elem = $driver->find_element('lst-ib', 'id'); $elem->send_keys('正月'); $elem = $driver->find_element('btnG', 'name'); $elem->click(); my $title = $driver->get_title; cmp_ok($title, 'eq', '正月 - Google 検索', 'Test: $title eq "正月 - Google 検索"'); } $driver->quit;
実行
1. まずはGoogleにアクセスし・・
2. ヘッダの「画像」をクリックして、テキストボックスに”正月”と入力・・
3. ”正月”の検索結果画面
正直これだけのテストケースならWWW::Mechanizeでできると思うんですが、1回書いたテストケースを、本物のブラウザが起動して、複数プラットフォーム・複数ブラウザで実行できるのはすばらしいなーと思いました。
Chromeでテストしたい場合
上の例はFirefoxなんですが、Chromeで動かしたい場合はドライバをダウンロードしてくる必要があります。
http://code.google.com/p/chromium/downloads/listで適切なドライバをダウンロードしてきて、standaloneサーバーを以下のとおりで起動しなおします。
% java -Dwebdriver.chrome.driver=<chromeドライバのパス> -jar selenium-server-standalone-2.15.0.jar
んで、Perlのコードを以下のように書き直して実行すればOK。
my $driver = Selenium::Remote::Driver->new( browser_name => 'chrome', );