ちくわ

ちくわにきゅうりを入れるとうまい

ブラウザの自動化処理を目的として Selenium を使ってみた

今回 Web テストの自動化で使われる Selenium を扱ったので、

色々とメモしておきたいと思います。

ただ、未だにわかっていない部分や使いこなしていない部分もあり、

内容については間違っていたりよりよい方法があると思いますので、

参考までに。

背景

自分は開発者ではないので、テスト目的ではなく、ブラウザを使用した日次処理や、

マンパワーが必要な複数処理を自動化したくて Selenium を導入しました。

とりあえず動くまで

躓いた事 -> なんか色々種類があってようわからん

Selenium のダウンロードページに行くと複数種類があり、環境や用途によって使い分けるようです。

とりあえずブラウザで自動化したいだけだったので、IDE を選択しました。

IDEFirefoxプラグインとして入り、GUI でテストケースを生成できます。

# 後に、IDE だけではやりたい処理が出来ないことが分かり、Client Drivers も使い始めましたが。。。

躓いた事 -> 新しい firefox で動かなかった

※ 2012/12 頃の話です。

導入時 Firefox は 18.0.1 でしたが、こちらでダウンロードした Selenium IDE(1.0.6) が入りませんでした。

http://oss.infoscience.co.jp/seleniumhq/download/index.html

本家ではより新しいバージョンが公開されており、ここから最新版(1.10.0)をおとして無事インストール

http://seleniumhq.org/download/

起動

Firefox のメニューから、ツール => Selenium IDE をクリックすると起動します。

起動すると以下の様なウィンドウが開きます。

右上の赤いボタン(録画ボタン?)が点いている状態で Firefox を操作すると、記録が開始されます。

以下は google で猫と検索し、wikipedia のページを開いたところです。

ちなみにこのまま再生ボタン(現在のテストケースを実行)をクリックすると失敗しました。

[error] Element link=ネコ - Wikipedia not found

テストの実行が早すぎて検索実行結果が開く前に not found でエラーになったようです。

左上のスライドバーを Slow 側に近づけて調整するか、3行目と4行目の間にコマンドを挿入し、

コマンド:pause

対象:3000(miillisedonds)

と設定すると、ここで指定時間待ってくれます。

こんな感じで調整しました。

頑張った事

画面キャプチャの保存先が yyyymmdd(毎日名前が変動する)ディレクトリだった

javascript と変数を使用

1. 以下のように javascript で変数を用意する

コマンド:store

対象:javascript{td = new Date();yy = td.getFullYear();mm = td.getMonth() + 1; if(mm < 10) mm = "0" + mm;dd = td.getDate(); if(dd < 10) dd = "0" + dd;yy + '' + mm + '' + dd;}

値:TODAY

2. 以下のように変数を使える

(エスケープの数は工夫したほうがいいかも)

コマンド:captureEntirePageScreenshot

対象:\\fuga\\foo\\${TODAY}\\hoge.png

値:

諦めた事

対象サイトは Basic 認証がかかっており、ここも自動化したかったのですが、

ぐぐってみると以下の様な情報を発見。

http://wiki.openqa.org/display/SEL/Selenium+Core+FAQ

→ How do I use Selenium to login to sites that require HTTP basic authentication (where the browser makes a modal dialog asking for credentials)?

ただ、上記対応を行なってもうまくいかない...なぜだ...

仕方ないので、basic 認証のところだけ、手入力しています(手入力中は pause で時間をかせぐw)。

せっかくの自動化が、半自動化に。うーん。何より、ダサい。。。

最後に

複数の ID/PW をリスト化して foreach 処理する。などは IDE では難しく、結果 Web Driver を使用することになりました。Web Driver に関しては機会があればまたメモしたいと思います。