Selenium で途中のスクリーンショットを自動保存

Selenium 始めました。w


まあ、お仕事でWebの案件やってるんですけどやっぱりテストが煩雑で繰り返しで面倒なんですよね〜
手動だと時間もかかるし、ミスも有るし、ヌケも有るしね。


で、自動化してみるために Selenium 使ってみました。
どこまで使えるのか検証するためにも実際のプロジェクトの案件に適応して。


まだまだテストパターン考えながら実験中なんだけど問題が。


実際の単体試験では試験の証拠(エビデンスとか言うけど、日本人の俺はなじめない業界用語w)を残さないといけなくて試験途中のハードコピーが必要なんだよね〜
Selenium の試験の結果を検証の証拠として認めてもらうには(お客さんや1次受けの)なかなか難しいと思うので、検証結果の資料は現行通りで行いたい。
でも、Selenium では自動でやっちゃうのでスクリーンショット(ハードコピー)撮れないのよね〜


どうするか?
試験は Selenium で行って、別に手動でスクリーンショットを撮るか?
ばかばかしいw


で、見つけたのが
Seleniumでキャプチャを取得する拡張コマンド:captureScreenshot - 現場のためのソフトウェア開発プロセス - たかのり日記
です。

テストケースに

<tr>
  <td>captureScreenshot</td>
  <td></td>
  <td></td>
</tr>

ってするだけで、スクリーンショットがファイルに自動で保存されます。


でも、ちょっと問題が・・・
試験中のブラウザのウィンドウのスクリーンショット *だけ* が欲しいんだけど、画面全体のスクリーンショットしか撮れません。
Alt + PrintScreen が希望なのに、 PrintScreen なのです。


試験は、Slenium RC 使って、Selenium Server 叩いて試験して、-multiWindow 使っているので、試験実行中のブラウザは画面の半分くらいで・・・スクリーンショット撮れても後で加工が必要だし、サイズ小さいから表示したいエリアが収まっていない可能性が・・・


で、どうしたか?
試験開始直後に、試験中のブラウザのウィンドウを最大表示にするようにしました。


Selenium Code 0.8.3 には最大化するコマンドが実装されていたので以下は不要と分かりました。
詳しくは Selenium 0.8.3 には windowMaximize ってコマンド有ったよ。 - メモとか技術ネタとか、そんな日記 をご覧ください。


■方法

1,user-extensions.js にウィンドウ最大化のコマンドを定義

Selenium.prototype.doWindowFullScreen = function(){
  var window = this.page().getCurrentWindow();

  window.moveTo(0,0);
  window.resizeTo(window.screen.availWidth,window.screen.availHeight);
};

2,最大化を行いたいタイミング(通常はテストスイート開始直後?)で、コマンド実行

<tr>
  <td>windowFullScreen</td>
  <td></td>
  <td></td>
</tr>

です。


これで、任意のタイミングで Selenium で試験中のブラウザのスクリーンショットが最大表示で保存して検証資料で使うことが出来るようになりました♪


以下、参考資料
Seleniumでキャプチャを取得する拡張コマンド:captureScreenshot - 現場のためのソフトウェア開発プロセス - たかのり日記
SeleniumでJavaScriptを使う方法いろいろ(変数・関数などの利用) | colori
http://colo-ri.jp/develop/2008/02/selenium_rc_seleniumserverjar.html