あなたの例に応えて、セットアップモジュールを含めるのを忘れたと思います(メソッド定義をモジュール内に入れましたよね?)。また、ドライバーをグローバル変数として割り当てることについて言及しているコメント (先頭にドル記号を付けて名前を付ける) は良い考えです。したがって、物事は次のようになります...
setup.rb
module Setup
def setup
$driver = Selenium::WebDriver.for :firefox
$wait = Selenium::WebDriver::Wait.new(:timeout => 10)
end
end
test_file.rb
require 'setup'
class SeleniumTest < Test::Unit::TestCase
include Setup # Modules need to be included (mixed-in) in order to be used inside classes
# Setup is automagically called when using TestUnit
$driver.get "http://www.yoururl.com"
$driver.find_element(:xpath => '//span[text()="войти"]').click
end
欠点は、作成する新しいモジュールとファイルごとに、使用するすべての新しいファイルとモジュールを要求して含める必要があることです。
私が見つけた方法は、'test_helper.rb' を作成し、'require_all' と呼ばれる gem を使用することです。
私の test_helper.rb は次のようになります。
require "rubygems"
require "require_all"
require "selenium-webdriver"
require "test-unit"
require_all relative_path("../lib/selenium/")
module TestHelpers
include Selenium
def setup
$driver = Selenium::WebDriver.for :firefox
...
end
def teardown
$driver.quit
end
end
また、test_page.rb には次の 2 行しか必要ありません。
# Line 1: Ensures the test_helper.rb gets loaded from the same directory the test_page.rb resides in
require File.join(File.dirname(__FILE__), 'test_helper')
class TestPage < Test::Unit::TestCase
# Line 2: Module needs mixed in to use its methods
include TestHelpers
def test_page
$driver.get "http://www.mysite.com"
assert $driver.find_element(:css => "div#my_site_logo")
end
end