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

時雨に舞う

プログラミングや技術情報などの備忘録

Selenium IDE を使ってみた

Webサービスのテストを行う際に商品や会員などをひたすら登録する単純作業が発生したら、Selenium IDE を検討してみてはいかがでしょうか。

Selenium IDE はブラウザ上の自動テストツールです。

手軽に使うには Firefox をインストールして、アドオンで Selenium IDE を追加します。色々と準備すれば他のブラウザもできるようですが、取り敢えず今回の要件はデータ入力なのでブラウザは問わないのです。

所感としては強力なような非力なような、標準でテストケースの繰り返し処理を入れて欲しかったが・・・、他のアドオンやコードの工夫で対応するしか無さそうですね。

 

1.まずは一連の動作を記録しよう

Selenium IDE は記録モード(赤い丸ボタン)があり、それをONにした状態でブラウザ上のコントロールをクリックしたり、テキストボックスに入力を行うと、1アクション→1行という単位で変換してくれます。

例えば「あいうえお」と入力したら

 type | id=txtName | あいうえお

といった具合です。上記のパイプで繋ぐ表現は

 コマンド | 対象 | 値

とご理解ください。

 

2.記録された内容を整理しよう

途中でクリックミスしたり誤入力したりすると、意図しない行が生成されるのでその辺りを削除するなどして必要なフローだけ残るようにしましょう。

 

3.コンボボックスに注意しよう

コンボボックスの中には画面内に捉えてないと失敗する事があります。

そんな時は画面をスクロールさせ、画面内に捉えてからクリック動作するように調整してみてはいかがでしょうか。

 storeEval | selenium.browserbot.getCurrentWindow().scrollTo(0,1900) |

この1900が座標値ですが、この値は何回か試して出したものです。コントロールの位置やブラウザの画面サイズなどから計算する事もできるかもしれませんが、今回はそんなに多くなかったのでマジックナンバーで失礼。

 

4.上記2.の内容を関数化しよう

追加でアドオン「SelBlocks」を入れると関数化など便利なコマンドが追加されます。それを使って関数にしてしまえば、繰り返し処理も書き易いです。

 function | 関数名 |
  :
 endFunction | |

これで関数ができました。繰り返しの呼び出し部を最初に持ってきて、関数を後に記述するといいかと思い、下記のようにしてみました。

 for | i=0; i<10; i++ | i
 call | 関数名 |
 endFor
 exitTest

 function | 関数名 |
  :
 endFunction | |

ようやくやりたかった繰り返し処理ができました。

 

5.変数を使ってワンランク上の自動化を目指してみよう

ここまできたら商品IDなどユニークな文字列を動的に生成しつつイテレートしたいなぁ~と思うのが普通ですよね。

  store | 値 | 変数名
 ※2番目が値である点に注意!Selenimu IDE の画面上は3番目のキャプションが「値」となっている!!

また、文字列と数値を結合したり、四則演算する場合は

 storeEval | javascript | 変数名

という形でjavascriptに頼るのが一般的(?)らしいです。ベストプラクティスは他にもあるかもしれませんが…。

例えばユーザーIDの命名規則が'XYZ'に続けてゼロ埋め6桁数値で、forループ内のiを使って増加させていく場合、

 store | 1234 | baseUserId
 storeEval | 'XYZ'+('00000'+(parseInt(storedVars.baseUserId)+parseInt(${i}))).slice(-6) | userId

 

ここで1234はループ開始時のベース値として使っています。

変数を使う時は

 clickAndWait | id=btn_itemid${itemId} |

という感じで ${変数名} で適用させます。

 

 

著者:t.n