【问题标题】:Ruby TestCase: Define instance variable in `self.startup` methodRuby TestCase:在`self.startup`方法中定义实例变量
【发布时间】: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 方法中可以看到它?

【问题讨论】:

  • 您可以使用实例方法setupteardown,而不是类方法startupshutdown。或者使用class variable,即@@browser
  • 不,我不能。因为setup 方法的行为不同于startup 方法。 Startup 只被调用一次,但setup 在类的每个测试方法之前。我不想那样。
  • "或使用类变量"
  • 好的,谢谢。所以如果我想使用实例变量(而不是类变量),是不是可能?
  • 我不确定我是否理解您要解决的问题。类变量有什么问题?

标签: ruby unit-testing selenium oop inheritance


【解决方案1】:

错误是因为您尝试访问在类级别定义的实例变量@browser。因为startupshutdown 是类方法,所以@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

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 2016-06-17
    • 2011-08-27
    • 2014-03-06
    • 1970-01-01
    • 2013-05-28
    • 2012-03-07
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多