Hatena::Diary

transparency1979の日記

2008-12-21

Watirまとめ

| 18:37

以前、仕事でWatir(http://wtr.rubyforge.org/)を使ったことがあった関係で、最近何人かの人から「使ってみたいんで情報くれ」と言われました。しばらく使ってないうちに色々変ってるみたいなので、この機会に簡単にまとめておきます。

そもそもWatirって何?

Watir(Web app testing in ruby)はWebブラウザの操作を自動化するRubyライブラリです。入力フィールドへの文字入力、セレクトボックスの選択、リンクやボタンの押下など、ブラウザ上での操作を自動で行ってくれるので、繰り返し試験を行う場面での手間を省いてくれます。操作についてはRubyで書くため、他の機能(入力データを別ファイルから読み込む、更新前後のDBダンプを取る、画面キャプチャを取るなど)をうまく組合せれば、テスト実施の手間をかなり軽減してくれることが期待できます。

Watir自体はIE専用ですが、派生ものとしてFireWatir(Firefox用)やSafariWatir(Safari用)があります。以前はブラウザ毎にクラスが存在していたため、スクリプトの共有ができなかったのですが、最近リリースされた1.6以降ではパラメータを変更するだけで同じスクリプトで別ブラウザでも動かすことが可能になりました。

インストール

rubygemsを使います。Watirは内部でwin32-apiを使用しているので、win32-apiのバージョンが古いと一緒に落してくる場合がありますが、そのときはコンパイルできる環境を用意しておきましょう。最新版のRuby One Click InstallerでRubyインストールしている場合は多分問題なし。

gem update --system

gem install watir

FireWatirを使いたい場合は、別途JSShプラグインが必要です。

1.5以前だと、モーダルダイアログを取り扱うためにはRubyのバージョンが1.8.2に限定されていましたが、1.6では解消されているみたいです。なので、古いバージョンを使っている方は最新化することをおすすめします。


サンプル

Googleの検索画面で、"ruby"と入力して検索開始ボタンを押下する。

require "rubygems"
require "watir"

Watir::Browser.default = "ie" # Firefoxで使用する場合は、"ie"の代わりに"firefox"と記述

browser = Watir::Browser.new
browser.goto "http://www.google.co.jp"
browser.text_field(:name, "q").set "ruby"
browser.button(:name, "btnG").click

問題

  • Firefoxでは日本語入力できない

TextField.text=で日本語を引数に渡すと、IEでは普通に通りますが、FireFoxでは文字化けを起こします。エンコーディングをどう変えてもダメです。これはJSShプラグインの問題で、マルチバイト文字を受付てくれないみたいです。回避策として、クリップボード経由でコピペする方法を書いておきます。要win32-clipboard。

require "rubygems"
require "watir"
require "win32/clipboard"
require "win32ole"
include Win32

Watir::Browser.default = "firefox"

shell = WIN32OLE::new('WScript.Shell')

Clipboard.set_data("気象庁")

browser = Watir::Browser.new
browser.goto "http://www.google.co.jp"
browser.text_field(:name, "q").focus
sleep 0.2
shell.AppActivate(browser.title)
sleep 0.2
shell.SendKeys("^v")
sleep 0.2

browser.button(:name, "btnG").click

参考サイト