Selenium-RCをRubyで試す

Seleniumでテストをしてゆきたいんだけど、Railsで使うパターンは結構みかけるものの、単純にRubyで制御したいだけの記事がちょっと見つからなかった。ということでテスト。

試した環境は以下の通り

まずは、Selenium-RCをダウンロード(1.0 beta1)
http://selenium-rc.openqa.org/download.html

これを解凍すると以下のフォルダが展開される。

サーバーシステムは「selenium-server-1.0-beta-1」のフォルダに入っているので、この中の「selenium-server.jar」を起動する。

$java -jre selenium-server.jar

これでlocalhsot:4444で起動する(オプションは「java -jar ./selenium-server.jar -help」で確認できる)。

ここでテストするパターンをつくる為に、Firefox->SeleniumIDEを起動する。試しとしては、Googleにアクセスして「Ruby」のキーワードで検索して「Rails」のキーワードで検索させてみよう(特に動きに意味は無い)。

この動作を記録したら、「オプション」->「フォーマット」を選択して「Ruby」フォーマットに変換する。

そうすると以下のスクリプトができるので、それを保存する(google.selとした)

require "selenium"
require "test/unit"

class NewTest < Test::Unit::TestCase
  def setup
    @verification_errors = []
    if $selenium
      @selenium = $selenium
    else
      @selenium = Selenium::SeleniumDriver.new("localhost", 
                                                4444, "*chrome", 
                                               "http://change-this-to-the-site-you-are-testing/", 
                                               10000);
      @selenium.start
    end
    @selenium.set_context("test_new")
  end
  
  def teardown
    @selenium.stop unless $selenium
    assert_equal [], @verification_errors
  end
  
  def test_new
    @selenium.open "/"
    @selenium.type "q", "ruby"
    @selenium.click "btnG"
    @selenium.wait_for_page_to_load "30000"
    @selenium.type "q", "rails"
    @selenium.click "btnG"
    @selenium.wait_for_page_to_load "30000"
  end
end

setupメソッドの「Selenium::SeleniumDriver」の引数が適当になっているので、そこを編集する。編集個所はブラウザの種類と初期のサイトurlを入れればOK。

まずはFirefox経由でテスト

@selenium = Selenium::SeleniumDriver.new("localhost", 
                                          4444, "*firefox", 
                                         "http://www.google.co.jp/", 10000);

ぬ、これはうまくいかないな。どうもFirefoxで新しいプロファイルを作りにいってるみたいで、放置しているとタイムアウトまで帰ってこない。Docに表示されているFirefoxを選択して「Command+Q」で停止してやるとなぜか起動してきて動作し始めるけど、こりゃ面倒だ。

safariならどうだろう。

@selenium = Selenium::SeleniumDriver.new("localhost", 
                                          4444, "*safari", 
                                          "http://www.google.co.jp/", 10000);

こちらならスムーズテストが通過する。

$ruby ./google.sel 
Loaded suite ./google.sel
Started
.
Finished in 4.460053 seconds.
1 tests, 1 assertions, 0 failures, 0 errors

MacでテストするならとりあえずSafariでテストするようにするかな。これで後は複雑なパターンをつくってテストスイートの形にしてみるようにしよう。

補足

ただ、IDE側が出力するRubyのひな形とRCのRuby配下にあるサンプルは構造が少し違う。今回はIDE自動出力の方をつかったれどdocがついているのでRC配下側の動きもきちんとみておかないといけない。