迴應你的例子,我想你忘了包含設置模塊(你確實把你的方法定義放在一個模塊中,對吧?)。此外,提到將驅動程序分配爲全局變量(通過以起始美元符號命名)是一個好主意。所以,事情是這樣的......
的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只需要兩行:
# 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
有一個給予好評!這解決了我一直在遇到的問題!在未來的4年裏感謝:-) – kroe761