【发布时间】:2018-02-09 10:59:24
【问题描述】:
我有这个 Ruby 代码:
class GoogleTestCase < BaseTestCase
def test_search
@browser.find_element(:name, 'q').send_keys "Hello Ruby"
@browser.find_element(:name, 'btnK')
end
end
然后我通过这个文件运行 GoogleTestCase:
...
class BaseTestCase < Test::Unit::TestCase
def self.startup
@browser = Selenium::WebDriver.for :chrome
@browser.get('https://google.com')
end
def self.shutdown
@browser.quit
end
end
exit Test::Unit::AutoRunner.run(true, test_dir)
启动后,一切正常。 Selenium 将运行 Chrome 浏览器,它会打开 Google 网页。但是当test_search 方法被触发时,Ruby 看不到@browser 变量:
如何在self.startup 方法中定义@browser 变量,以便在test_search 方法中可以看到它?
【问题讨论】:
-
您可以使用实例方法
setup和teardown,而不是类方法startup和shutdown。或者使用class variable,即@@browser。 -
不,我不能。因为
setup方法的行为不同于startup方法。Startup只被调用一次,但setup在类的每个测试方法之前。我不想那样。 -
"或使用类变量"
-
好的,谢谢。所以如果我想使用实例变量(而不是类变量),是不是可能?
-
我不确定我是否理解您要解决的问题。类变量有什么问题?
标签: ruby unit-testing selenium oop inheritance