5分でわかるWatir

以下の文章はŽeljko Filipinによる"Watir in five minutes"の翻訳です。*1




(中略)


僕が初めてWatirを仕事で使った時、すごく驚いたことを今でも覚えている。インストールしてから数時間で、僕はテスト中のWebアプリケーション用のスクリプトを書けるようになっていた。この本を読めば、数時間もかからずにWebサイトをテストできるようになるはずだ。


もしRubyに親しんでいるのなら、IRBRubyライブラリを勉強するための最良のツールの1つだってことがわかっているだろう。
もしRubyを知らないのなら、こう思うかもしれない。IRBって何?
IRB(この場合)はInternational Ruby BoardでもImmigration or Refugee Board (of Canada)のことでもない。Interactive Ruby Sehllのことだ。読んで字の如く、Ruby用のシェルことだと思ってくれ。


IRBをスタートするためには、コマンドライン上で'irb'と打てばいい。このように表示されるはずだ。

$ irb
>

これで、Rubyコマンドを打ち込めば、即座に結果が得られるようになった。'require "watir-webdriver"と入力してwatir-webdriver gemを使用することをRubyに伝えてみよう。
このように表示されるはずだ。

> require "watir-webdriver"
=> true

こうなっても、パニクるな。

> require "watir-webdriver"
LoadError: no such file to load -- watir-webdriver
from (irb):1:in `require'
from (irb):1


これは最初にRubyGemsをrequireしなければならないことを意味している。この場合は、このようにする。

> require "rubygems"
=> true

> require "watir-webdriver"
=> true

すべてのRubyコマンドは何らかの値を返す。`require "rubygems"`は、Rubyのインストール状況に応じて'true'または'false'を返す。今のところは気にしなくていい。`require "watir-webdriver"`の返り値は`=> true`となるはずだ。返り値には2つの部分がある。最初のは'=>'。矢印みたいなこれは、'Rubyがこれを返した'ということを意味している。2つめの部分は'true'。'true'が返ってきた場合、すべてが上手く行っている。
こうは言ったけれども、とりあえず返り値のことは無視してくれてかまわない。


さてこれからが魔法の始まりだ。この1つのコマンドでFirefoxが立ち上がる。

browser = Watir::Browser.new :ff

https://github.com/ninoseki/watirbook/raw/master/images/watir-in-five-minutes/webdriver-firefox.png
watir-webdriver driving Firefox 6 on Mac OS 10.6


(中略)


立ち上げるブラウザは1つだけにしておこう。それで十分だ。他のブラウザとは後で遊ぼう。出力はこうなるはずだ。

> browser = Watir::Browser.new :ff
=> #<Watir::Browser:0x2ed1f1cd5b186306 url="about:blank" title="">

前にも言ったように、`#`のところは無視してかまわない。立ち上げたFirefoxがBrowserオブジェクトとして返り値となったものの、テキスト表現だ。


ただブラウザを立ち上げただけでもカッコいいけど、まだ便利ではない。Watirはそれ以上のことができる。例えば、ブラウザをどんなサイトへも誘導することができる。今回の例として、google.comを使用する。この例を終えてから、他のサイトへも自分自身で試してもらいたい。


さて、google.comへ行こう。

> browser.goto "http://www.google.com/"
=> "http://www.google.hr/"

google.comが開かれたね。魔法みたいじゃないかい?


ブラウザをコントロールすることはとても便利だ。だけどもちろん、テストをするためにはアクションを実行するだけでは足りない。アクションの後に何が起きたのか確認しなければいけないんだ。ブラウザのアドレスバーにURLを入力した後に何が起きるか、リンクボタンをクリックし後に何が起きるか、テキストフィールドに何か入力したりセレクトボックスで何かを選択した場合に何が起こるのか・・・?


これから初めて確認を行う。同じように、初めてコマンドの後にRubyが何を返したのかについても調べて見る。ブラウザがgoogle.comを実際に開いたか確認してみよう。

> browser.url
=> "http://www.google.hr/"

ちゃんと動いてたね!Rubyはブラウザのアドレスバーの文字列を返した。僕はクロアチアに住んでいるから、*google.hr*が開いた。もし君がアメリカ以外の国に住んでいるなら、別のGoogleサイトを開いているだろう。


リンクをクリックするときがきた。どのリンクをクリックするのか、簡単に明示することができる。今は、Google.com in Englishというテキストのリンクをクリックしてみる。同じテキストのリンクが同一ページ内に複数あると少し複雑になるけど、これに関しては後で扱う。もし既にgoogle.comを開いているなら、このステップは無視してくれ。

> browser.link(:text => "Google.com in English").click
=> []

さて、google.comが開いた。

別のリンクをクリックする前に、Watirのすごい特徴をお見せしよう。それはフラッシュという。現実のWebアプリケーションは複雑だ。時には既存のもののテストやデバッグを行わければいけない。正しい要素をやり取りしているのか、確認しないといけない。試してみよう(google.comの左上にあるImagesリンクを見て)。

> browser.link(:text => "Images").flash
=> 10

https://github.com/ninoseki/watirbook/raw/master/images/watir-in-five-minutes/flash-1.png
https://github.com/ninoseki/watirbook/raw/master/images/watir-in-five-minutes/flash-2.png


リンクがフラッシュしたのが確認できた?バックグラウンドカラーが赤に数回変わった。クールじゃない?僕はWatirを使うときは何時もこの機能を利用する(例えばカンファレンスで)。Watirはプレゼン向きだと思う。とても視覚的だ。
もしフラッシュが確認できなかったら(フラッシュするのは短い間だ)、同じコマンドを数回実行してもらいたい。同じコマンドを実行するために上向きの矢印キーをクリックすればいい。


リンクをクリックしてみよう。

> browser.link(:text => "Images").click
=> []

今回はページのタイトルを確認してみよう。

> browser.title
=> "Google Images"

ページのタイトルが文字列で返ってきた。

なにか検索してみよう。これは検索のテキストフィールドにbookの入力を行う。

> browser.text_field(:name => "q").set "book"
=> ["book"] 

どうやって僕がテキストフィールドのname属性がqだとわかったのか不思議かもしれない(':name => "q"'のこと)。もし君がページ内を調査する方法を知らなくても、このまま読み進めてくれ。後で説明する。


さて、Search Imageボタンをクリックしよう。

> browser.button(:value => "Search Images").click
=> []

検索結果ページが表示された。ページ内に何枚画象があるのか確認してみよう。
(違う結果になる可能性もあって、常に250というわけではない)

> browser.images.size
=> 250
||< 
最後に、ブラウザを閉じてみよう。
>||
    > browser.close
=> true

さて、楽しめたね。だけど常にIRBに入力したくはないだろう。テストを実行している間に、何か他のことをやりたいでしょ。RubyWatirの他のほとんどすべてと同じく、単純な解決策がある。IRBに入力したコードをすべてテキストファイルに貼りつけて、拡張子を*rb*にして保存するんだ。IRBは開発やデバックの時にしか使わない。だから、'irb'をファイルの最初の行に貼り付けなくていい。ファイルはこのようになるはずだ。

require "watir-webdriver"
browser = Watir::Browser.new :ff
browser.goto "http://www.google.com/"
browser.url
browser.link(:text => "Google.com in English").click
browser.link(:text => "Images").click
browser.title
browser.text_field(:name => "q").set "book"
browser.button(:value => "Search Images").click
browser.images.size
browser.close

IRBに`require "rubygems"`と入力していた場合は、 ファイルの先頭にこれを付け加えておこう。

どんなテキストエディターを使用してもかまわない。僕は [RubyMine](http://www.jetbrains.com/ruby/)か[NetBeans](http://netbeans.org/)を使っている。

スクリプトを実行する。出力はこのようになるはずだ。

$ ruby watir5.rb
http://www.google.hr/
Google Images
246

後でクールな見た目のレポートの作り方を教えよう。

これまでのところで良い印象を受けなかったら、多分もう無理だ。もし気に入ってくれたのなら、どでかい大砲を持ってくる時がきた。深いところへ行こう。