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文件中执行此操作)。但我不想打开浏览器开始每个测试..
非常感谢任何帮助。如果我需要更多信息,我会尽快更新。
提前致谢!
答案 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。