6

使用 ruby​​ 的 watir 来测试一个 web 应用程序使浏览器在最后保持打开状态。网上的一些建议是,要进行真正的单元测试,您应该在每次测试时打开和关闭浏览器(在拆解调用中),但这很慢而且毫无意义。或者他们做这样的事情:

 def self.suite
   s = super
   def s.afterClass
     # Close browser
   end

   def s.run(*args)
     super
     afterClass
   end
   s
 end

但这会导致摘要输出不再显示(仍应显示“100 个测试、100 个断言、0 个失败、0 个错误”之类的内容)。

我怎样才能让 ruby​​ 或 watir 在测试结束时关闭浏览器?

4

2 回答 2

12

当您想在RSpec规范中使用一个且唯一的浏览器时,您可以使用:suite钩子而不是:all在每个示例组中创建和关闭浏览器:

RSpec.configure do |config|
  config.before :suite do
    $browser = Watir::Browser.new
  end

  config.after :suite do
    $browser.close if $browser
  end
end

但是,如果出于某种奇怪的原因您不想自己使用 RSpec 或任何测试框架,那么您可以使用 Ruby 的Kernel#at_exit方法:

# somewhere
$browser = Watir::Browser.new
at_exit { $browser.close if $browser }

# other code, whenever needed
$browser.foo

我仍然建议使用测试框架,而不是从头开始创建自己的框架。

于 2013-01-22T19:31:16.600 回答
2

RSpec 和 Cucumber 都有“毕竟”的钩子。

规格:

describe "something" do
  before(:all) do
    @browser = Watir::Browser.new
  end
  after(:all) do
    @browser.close
  end
end

( ) 中的黄瓜env.rb

browser = Watir::Browser.new

#teh codez

at_exit do
  browser.close
end
于 2013-01-22T13:36:59.743 回答