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

时间:2016-03-08 15:44:22

标签: cucumber watir watir-webdriver

Hello StackOverflow成员,

我一直在搜索网站(以及网络的其余部分)以获得这个问题的答案,但我所有的搜索查询都返回了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文件中执行此操作)。但我不想打开浏览器开始每个测试..

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

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

  • 运行cucumber命令
  • 时会自动包含它
  • 在拨打GoogleSearch.rb行时,require_relative "../support/env"第二次将其包含在内。

结果,每个挂钩都被注册两次。换句话说,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