WIN32OLE使って楽をする

結合テストフェーズでは、
Excelでテストデータを作成し、それを順番に作った画面に打ち込む!」
という作業をよくやります。
前々から思っていましたが、このExcelで作ったデータを見ながら画面に打ち込む作業はものすごく苦痛です。(´Д` )

そこで先日紹介した「Ruby on Windows」の影響を受けて、以下で自動化を試してみました。

  • 画面遷移の制御は、WIN32OLEからIEを直接操作
  • 入力するデータもWIN32OLEからExcelデータを直接読み込む
  • 読み込んだデータを画面の項目に設定する部分はRubyスクリプトをゴリゴリ書く

 
で結果はというと、かなりうまくいってご満悦。
一点詰まったのはIEの描画時間。

ie = WIN32OLE.new("InternetExplorer.Application")
ie.Visible = true
ie.Navigate "http://localhost/target"

while ie.Busy
    sleep 1
end

#以降の処理へ〜

っていう具合にBusyプロパティだけを見てすぐに次の処理へ進むようにしていると、
画面が描画し終わる前に次に進んでしまう場合がある(※必ずそうなるわけではないところが詰まった)
ようで、次の画面に表示されるオブジェクトを探しに行って存在しない⇒エラー
という具合になってしまいました。
本にも書かれてましたが、この辺は環境毎に調整するしかないと思うので、
「sleep 1.5」
とかを次の処理に進む前に入れることで解決。
安定動作するようになりました。

ともかくも、Rubyist Magazine及びRuby on Windowsを書かれているcuzic氏に感謝です。