世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2007年03月04日

SeleniumRC spec

Selenium on Railsもいいけど、やっぱり、Rspecに全部統合したいわけですよ。あと、全部Rakeから自動でやりたい。で、SeleniumRCの呼び出しをRSpecに統合してみた。

2007-03-05追記。@selenium.stopを忘れてました。

2007-11-20追記。RSpecの新記法/新実装に対応した新しいバージョンを作りました。

script/selenium/にselenium-server.jarを置いておいて、

def selenium_context(*args, &block)
  context(*args) do  
    context_setup do 
      @selenium_pid = Process.fork do
        $stdin.reopen(File.open('/dev/null'))
        $stdout.reopen(File.open(File.join(RAILS_ROOT, 'log', 'seleniumrc'), 'a'))
        $stderr.reopen(File.open(File.join(RAILS_ROOT, 'log', 'seleniumrc.err'), 'a'))
        exec 'java', '-jar', File.join(RAILS_ROOT, 'script', 'selenium', 'selenium-server.jar')
      end
      @server_pid = Process.fork do
        exec File.join(RAILS_ROOT, 'script', 'server'), *%w[-p 4545 -e test]
      end
      sleep 0.5 # サーバーが起動するまで適当に待機
      @verification_errors = []
      @selenium = Selenium::SeleneseInterpreter.new("localhost", 4444, "*firefox", "http://localhost:4545", 10000)
      @selenium.start
      @selenium.set_context("test_new", "info")
      @selenium.instance_eval do
        def method_missing(msg, *args)
          if self.respond_to?("get_#{msg}")
            self.__send__("get_#{msg}", *args)
          else
            super
          end
        end
      end 
    end
    context_teardown do
      @selenium.stop if @selenium rescue nil
      Process.kill :INT, @selenium_pid  if @selenium_pid rescue nil
      Process.kill :INT, @server_pid if @server_pid rescue nil
      Process.waitall
      @verification_errors.should_be == []
    end
    instance_eval(&block)
  end
end

spec_helper.rbにこんな風に書いておいて、specのほうは、

require File.dirname(__FILE__) + '/../spec_helper'
require "selenium"
selenium_context 'Hogeのとき' do
  setup do
    @selenium.open('/hoge/')
  end 
  specify '表題' do
    @selenium.title.should_be == 'huga'
  end
end

ついでに Rakefileに

namespace 'spec' do
  Spec::Rake::SpecTask.new(:selenium => "db:test:prepare") do |t|
    t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
    t.spec_files = FileList['spec/selenium/**/*_spec.rb']
  end
end
task :spec => 'spec:selenium'

トラックバック

http://yugui.jp/articles/591/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system