【问题标题】:How to close browser at the end of watir test suite?如何在 wir 测试套件结束时关闭浏览器?
【发布时间】:2013-01-23 03:31:16
【问题描述】:

使用 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 在测试结束时关闭浏览器?

【问题讨论】:

  • 您使用的是哪个测试运行器?测试::单位?
  • Test::Unit::TestCase 只要它的工作原理相同,它就不会打扰我。只是想让我得到的东西更好地工作。

标签: ruby unit-testing watir


【解决方案1】:

如果您想在 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

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

【讨论】:

  • @pguardiario 全局变量在这里是必要的,因为在 RSpec 中的 :suite 挂钩中设置变量意味着范围与所有示例/示例组不同。此外,在有意义的地方为单例对象使用全局变量(你只有一个浏览器,对吗?)不是shit hack。或者,你会怎么解决?
  • 我真的没有比这更好的了。抱歉,我要删除那条评论。
【解决方案2】:

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

RSpec:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 2020-03-14
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多