読者です 読者をやめる 読者になる 読者になる

ますたろー日記

大阪から上京して7年。渋谷界隈で頑張ってます。

Selenium2をいじってみた:vol1

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にアクセスし・・
f:id:masutaro:20120102154446p:plain

2. ヘッダの「画像」をクリックして、テキストボックスに”正月”と入力・・
f:id:masutaro:20120102154449p:plain

3. ”正月”の検索結果画面
f:id:masutaro:20120102154517p:plain

正直これだけのテストケースなら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',
);