Selenium IDEをブラウザのマクロとして使う

Selenium IDE

Selenium IDEは、ブラウザ操作をコマンドとしてレコーディングし、それをSeleniumのテストとして保存、実行できるFirefoxプラグインです。これを使うと、とっても簡単にテストの作成、実行ができます。

プログラミングの知識は(ほとんど)不要です。単にやりたいことを、ブラウザ操作で行うだけです。入力内容や表示内容のチェック自体も、ブラウザ上から指定できます。

Selenium IDEは、HTML形式(Selenium RC形式)のテストとして保存、読み込みができるのですが、SeleniumとしてメインとなりつつあるWebDriver形式のテストコードもエクスポートすることができます。

Selenium IDEをブラウザのマクロとして使う

ブラウザ操作を繰り返し実行させることができるので、ブラウザのマクロ的に利用することもできます。定型的なブラウザ上での一連の操作を一度レコーディングしておいて、それを繰り返し利用すれば、作業の手間を削減することができるのではと思います。

また、Seleniumのコマンドとして、JavaScriptの実行もできるので、定型的な作業の一部については、ユーザに入力を促したり、現在日時を取得して埋め込んだり、、といったこともできます。

例:Redmineでチケット作成

Redmineでのチケット作成を例として、一連の流れを説明してみます。

まずは、Selenium IDEですが、下記のサイトからインストールします。(Firefoxのアドオンですので、Firefox限定となります)

f:id:onozaty:20150111024357p:plain

インストールが完了したら、操作を記録したいサイトに移動してSelenium IDEを開きます。「ツール」→「Selenum IDE」で開くことができます。

そうしたら、単にブラウザを操作するだけで、操作した内容がコマンドとして入力されていきます。

f:id:onozaty:20150111024753p:plain

操作が完了したら、Selenium IDEの右上にある赤いボタンをクリックし、レコーディングを停止します。

実行ボタンを押下すると、レコーディングによって登録された一連のコマンドが実行され、ブラウザ操作が再現されます。

f:id:onozaty:20150111025043p:plain

テストは「ファイル」→「テストケースを保存」でファイルとして保存できるので、また後で読み込んで繰り返し実行することができます。

Redmineのチケット作成はあくまで例ですが、、とても多くのブラウザ操作を伴うような作業で、かつ繰り返し行うような場合に、Seleniumを使うのは有用ではと思います。

マクロとして利用する際に役に立つTips

1. JavaScriptの実行結果を使用する

JavaScriptを実行できるので、これによっていろいろ幅を広げることができます。

たとえば、現在日を入力させたい場合には、下記のように書けます。

コマンド対象
type name javascript{var now = new Date(); now.getFullYear() + "年" + (now.getMonth() + 1) + "月" + now.getDate() + "日"}

表示している画面のwindowオブジェクトを参照したい場合には、this.page().getCurrentWindow() を使用します。

たとえば、ブラウザのタイトルを取得したい場合には、下記のようにします。

コマンド対象
type name javascript{this.page().getCurrentWindow().document.title}

上記であげたのはあくまで一例にしかすぎません。JavaScriptを書けるということは、ロジックを入れられることに等しいので、Seleniumのコマンドと組み合わせることで、結構何でも自由にできるかと思います。

JavaScriptを使う方法は、下記がとても詳しくまとまっていますので、リンクをはっておきます。

2. 実行時に任意の値を渡す

JavaScriptで入力プロンプト(prompt)を出して、そこで任意の値を入力することにより、Seleniumのコマンドにて使用することができます。

たとえば、一番最初にstoreコマンドで変数に格納しておいて、後から必要な個所で利用するといったことができます。

コマンド対象
store javascript{prompt("入力してください")} value

storeコマンドで格納した変数は、${value}で参照できます。

f:id:onozaty:20150112151243p:plain

直接入力した値をテキストエリアとかに入れたい場合は下記のように値にJavaScriptを書きます。

コマンド対象
type name javascript{prompt("入力してください")}
3. 繰り返し実行させる

Selenium IDEのデフォルトでは使えないのですが、SelBlocks というプラグインを追加することによって、ループ(for/foreach/while)が書けるようになります。

forコマンドとendForコマンドでfor文を実現します。(下記は10回繰り返す場合の書き方です)

コマンド対象
for i = 0; i < 10; i++  
endFor    

for文で使った変数は、storeで設定した変数と同様に ${i} で参照できます。

f:id:onozaty:20150112230835p:plain

while文は下記の通りです。対象の評価結果がtrueの間繰り返すことになります。(無限ループとかも普通に書けちゃいます)

コマンド対象
while ${i} < 10  
endWhile    

foreachは、値としてカンマ区切りのものを使用します。対象に入れたものが変数名になります。

コマンド対象
foreach userid "user1", "user2"
endForeach    

f:id:onozaty:20150112232602p:plain

SelBlocksのリファレンスは下記になります。

繰り返しができることはとても強力で、たとえばテストデータの投入で、指定した件数分を画面操作で入力させるといったことが可能になります。しかも「2.実行時に任意の値を渡す」と組み合わせると、回数指定も任意に入力させることができるので便利です。

たとえば下記は、指定した回数分alertを表示するコマンドになります。

コマンド対象
store javascript{prompt("実行回数を入力してください")} count
for i = 0; i < ${count}; i++  
getEval alert(${i})  
endFor    

f:id:onozaty:20150112233446p:plain

おわりに

Selenium IDEはとても便利なので、ぜひテスト以外でも使ってみてはいかがでしょうか。