watir-webdriver 不断打开多个浏览器

Watir-webdriver keeps opening multiple browsers

你好 Whosebug 成员,

我一直在网站(以及网络的其余部分)中搜索这个问题的答案,但我所有的搜索查询都返回了 Watir 的强大功能......我似乎是少数人之一运行正在解决这个特殊问题。我希望有人能为我提供一个简单的答案:)

我正在从事网站测试自动化方面的工作。当前测试集写成Cucumber/Ruby/Selenium-Webdriver/Capybara。我个人对结合 Cucumber 和 Ruby 切换到 Watir-Webdriver 很感兴趣,但我正在努力解决以下问题:

每次我 运行 我的黄瓜测试,Watir 打开的不是一个,而是两个浏览器屏幕。它似乎想要启动一个空白屏幕(它只是转到我配置为默认的站点),以及另一个执行实际测试步骤的浏览器屏幕。

请记住,我对此很陌生,只是在遵循初学者教程时遇到了这个问题。目前还没有什么特别的。

在我的 'Support/env.rb' 文件中,我有以下内容:

require "cucumber"
require 'watir-webdriver'

app_host = ENV['apphost']

Before do
  @browser = Watir::Browser.start app_host, :firefox
end


Before  do |scenario|
  @scenario_tag = scenario.source_tag_names
  @browser.cookies.clear
end

at_exit do
  @browser.close
end

我的步骤文件中的第一位(GoogleSearch.rb——是的,就是这么基础):

require_relative "../support/env"

Given(/^that I have gone to the Google page$/) do
  @browser.goto 'http://www.google.com'
end

现在,当我 运行 这个测试时,我希望只启动一个浏览器。但是,自动化会启动两个浏览器屏幕。一个只是在后台什么都不做,另一个包含测试步骤。

同样,我现在已经搜索了一段时间(我通常很擅长),但我没有在任何地方找到问题的答案。我让它工作的唯一方法是从我的步骤文件中的一个步骤开始,启动浏览器(而不是在 env.rb 文件中执行此操作)。但是我不想每次都打开浏览器开始测试..

非常感谢任何帮助。如果需要我提供更多信息,我会尽快更新。

提前致谢!

问题是 env.rb 被加载了两次:

  • 当运行使用cucumber命令
  • 时自动包含
  • 当调用行 require_relative "../support/env".
  • 时,它第二次包含在 GoogleSearch.rb

因此,每个挂钩都被注册了两次。换句话说,Cucumber 在每个场景之前看到 运行 的钩子:

Before do
  @browser = Watir::Browser.start app_host, :firefox
end

Before  do |scenario|
  @scenario_tag = scenario.source_tag_names
  @browser.cookies.clear
end

Before do
  @browser = Watir::Browser.start app_host, :firefox
end

Before  do |scenario|
  @scenario_tag = scenario.source_tag_names
  @browser.cookies.clear
end

如您所见,Watir::Browser.start 被调用两次导致两个浏览器。第一个未使用,因为第二次调用使用相同的变量。

要解决此问题,只需删除 require_relative "../support/env" 行即可。

请注意,这只会解决为每个场景打开两个浏览器的问题。您会注意到您仍然会为每个场景获得一个新的浏览器,并且只有最后一个浏览器被关闭。如果你只想要一个浏览器适用于所有场景,你应该看看 global hooks.