我有这个Ruby代码:
class GoogleTestCase < BaseTestCase
def test_search
@browser.find_element(:name, 'q').send_keys "Hello Ruby"
@browser.find_element(:name, 'btnK')
end
end
&#13;
然后我通过此文件运行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)
&#13;
发布后,一切都很好。 Selenium将运行Chrome浏览器,它会打开Google网页。但是当test_search
方法被触发时,Ruby无法看到@browser
变量:
如何在@browser
方法中定义self.startup
变量,以便在test_search
方法中我可以看到它?
答案 0 :(得分:1)
错误是因为您尝试访问在类级别定义的实例变量@browser
。由于startup
和shutdown
是类方法,因此@browser
是类变量。
您可以使用@@browser
从实例级别访问类变量。
class GoogleTestCase < BaseTestCase
def test_search
@@browser.find_element(:name, 'q').send_keys "Hello Ruby"
@@browser.find_element(:name, 'btnK')
end
end
请记住,@@browser
在此类的所有实例中都是相同的。
此外,您可以封装在辅助方法中访问浏览器变量的方式:
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
def browser
@@browser
end
end
class GoogleTestCase < BaseTestCase
def test_search
browser.find_element(:name, 'q').send_keys "Hello Ruby"
browser.find_element(:name, 'btnK')
end
end