2011-12-30 13 views
0

我知道在大多數測試框架中,都有一個清理功能。我一直在從IRB運行一些測試,所以我想構建一個自動清理函數(就像析構函數一樣)。我嘗試了一些finalize類型的函數,但沒有一個關閉不需要的瀏覽器。有人解決了這個問題嗎?我可以爲在watir-webdriver中運行瀏覽器的類創建類似析構函數嗎?

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

爲什麼不以黃瓜爲例?我正在爲我的項目做這件事。 優點:

  • 對功能的說明
  • 使用RSpec,漂亮的匹配像@ browser.url.should匹配 「google.com」
  • 連續運行尼斯DSL
  • 功能隔離

從我的項目中,我只創建了一個單獨的項目,只有黃瓜功能:

測試項目結構:

|-- 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關閉它。這也適用於窗口BTW

+0

非常感謝斯坦尼斯拉夫。我有一個測試框架解決方案(我正在使用RSpec來完成),所以我可以很好地關閉after:all。但我正在與IRB合作,忘記在新會話之前關閉瀏覽器(懸掛進程)。如果可能,我寧願在析構函數中殺死它。但是這些信息非常有用(因爲我對正確的項目結構瞭解不多)。 – 2011-12-31 05:46:44

相關問題