Ruby 我可以为在watir webdriver中运行浏览器的类创建类似析构函数的函数吗?

Ruby 我可以为在watir webdriver中运行浏览器的类创建类似析构函数的函数吗?,ruby,automated-tests,irb,watir-webdriver,Ruby,Automated Tests,Irb,Watir Webdriver,我知道在大多数测试框架中,都有一个需要清理的函数。我已经从IRB运行了一些测试,所以我想构建一个自动清理功能(比如析构函数)。我尝试了一些finalize类型函数,但没有一个关闭不需要的浏览器。有人解决过这样的问题吗 IRB看起来像 d = Session.new => #<Session:0x1016c5e60 @browser=#<Watir::Browser:0x1016c5dc0 url="http://ipchicken.com/" title="IP Chicken

我知道在大多数测试框架中,都有一个需要清理的函数。我已经从IRB运行了一些测试,所以我想构建一个自动清理功能(比如析构函数)。我尝试了一些finalize类型函数,但没有一个关闭不需要的浏览器。有人解决过这样的问题吗

IRB看起来像

d = Session.new
=> #<Session:0x1016c5e60 @browser=#<Watir::Browser:0x1016c5dc0 url="http://ipchicken.com/" title="IP Chicken - Whats my IP address? ip address lookup"
d.do_something_test
your test passed!
=> nil
d = nil
=> nil

或者也许我完全错了!?提前谢谢。

为什么不使用黄瓜作为例子?我这样做是为了我的项目。 好处:

  • 用于功能描述的漂亮DSL
  • 有了rspec,像@browser.url.这样的好匹配程序应该匹配“google.com”
  • 连续运行
  • 特征隔离
在我的项目中,我创建了一个单独的项目,仅包含cucumber功能:

测试项目结构:

|-- config.yml
|-- features
|   |-- login.feature
|   |-- signup.feature
|   |-- profile.feature
|   |-- ...
|   |-- step_definitions
|   |   |-- auth_steps.rb
|   |   `-- click_steps.rb
|   |-- support
|   |   |-- dom.rb
|   |   |-- env.rb
|   |   `-- path.rb
|-- Gemfile
`-- Gemfile.lock
我的档案:

source "http://rubygems.org"

gem "firewatir"
gem "watir-webdriver"
gem "awesome_print"

gem "cucumber"
gem "cucumber-rails"
gem "rspec"
gem "rspec-core"
gem "rspec-expectations"
gem "rspec-mocks"
env.rb

require 'rspec/expectations'
require 'time'

Before do
  @config = YAML.load_file(File.join(File.dirname(__FILE__), '../../config.yml'))["test"]
  @@browser ||= case @config["browser"]
    when "firefox"
      require 'firewatir'
      FireWatir::Firefox.new
    when "IE"
      require 'watir'
      Watir::Browser.new
    when "Opera"
      require 'operawatir'
      OperaWatir::Browser.new
    when "Safari"
      require 'safariwatir'
      Watir::Safari.new
    when "Chrome"
      require 'watir-webdriver'
      Watir::Browser.new(:chrome)
    end
end

at_exit do
  @@browser.close
end
如果你需要更多的描述,我会更新答案


更新:正如您在创建浏览器并在退出时关闭它之前所看到的。这也适用于windows,顺便说一句,非常感谢Stanislav。我有一个测试框架解决方案(我用RSpec来做),所以我可以用after:all来很好地结束。但是我也经常和IRB打交道,忘记在新的会话之前关闭浏览器(悬空过程)。如果可能的话,我宁愿在析构函数中杀死它。但是这些信息非常有用(因为我不太了解正确的项目结构)。
require 'rspec/expectations'
require 'time'

Before do
  @config = YAML.load_file(File.join(File.dirname(__FILE__), '../../config.yml'))["test"]
  @@browser ||= case @config["browser"]
    when "firefox"
      require 'firewatir'
      FireWatir::Firefox.new
    when "IE"
      require 'watir'
      Watir::Browser.new
    when "Opera"
      require 'operawatir'
      OperaWatir::Browser.new
    when "Safari"
      require 'safariwatir'
      Watir::Safari.new
    when "Chrome"
      require 'watir-webdriver'
      Watir::Browser.new(:chrome)
    end
end

at_exit do
  @@browser.close
end