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

时间:2011-12-30 18:31:31

标签: 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 - Whats my IP address? ip address lookup"
d.do_something_test
your test passed!
=> nil
d = nil
=> nil

使用类似

的示例类
require 'watir-webdriver'
class Session
  attr_accessor :browser
  def initialize
    @browser = Watir::Browser.new
    @browser.goto 'http://ipchicken.com'
  end

  def do_something_test
    puts "your test passed!" if @browser.html.match /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
  end
end

或许我接近这一切都错了!?提前谢谢。

1 个答案:

答案 0 :(得分:1)

为什么不以黄瓜为例?我正在为我的项目做这件事。 优点:

  • 用于功能描述的Nice DSL
  • 与rspec,@ browser.url.should等匹配“google.com”的好匹配者
  • 持续跑步
  • 功能隔离

我的项目中的一个小方法,我刚刚创建了一个单独的黄瓜功能项目:

测试项目结构:

|-- 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

我的Gemfile:

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

如果您需要更多说明,我会更新答案。

更新:正如您所见,在创建浏览器之前,at_exit将其关闭。这也适用于Windows以及BTW