2012-04-19 24 views
6

我是Cucumber和Ruby的新手。我是一名业务分析师,曾经写过需求和测试案例,我已经阅读了Cucumber和Watir,但是我很难得到我需要实际工作的事情。黄瓜档案和全局钩子选择浏览器

我将在IE,Firefox和Chrome以及不同类型的用户中测试一组网页。我正在编写和标记功能,并在cucumber.yml中创建配置文件,以便我可以使用-p运行黄瓜,以针对不同的用户类型运行适当的标记测试。

我正在创建不同的页面对象,以便我可以轻松地以基本用户,报告用户,编辑器用户等身份登录。对于每种类型的用户,功能文件的场景和通过/ step defs会调用相应的页面对象以用户类型登录。

而不是重复测试三次,每次打开正确的浏览器与watir-webdriver,而不是让浏览器打开和关闭每个场景,我想在env.rb或hooks.rb在运行任何功能之前只打开一次浏览器,然后在全部功能全部运行时,在全局挂接语句之后关闭它。同样,我正在使用调用标记场景的配置文件来选择为每个用户类型运行哪些测试。

我遇到的问题是在此之前的一个步骤,只是打开浏览器。我知道如何使用watir-webdriver打开每个浏览器。

我想要的东西是在全球范围内挂钩以在任何测试之前打开浏览器。 所以在env.rb我打算把浏览器= Watir :: Browser.new调用。

我想要做的是有三个独立的全局钩子,IE,Chrome和Firefox各一个,并根据从cucumber.yml中的配置文件传递的条件调用它们,但我无法获取它上班。我试图给他们加上标签,但这并不奏效。你不能标记全局钩子?我用if/then/else安装了它,但那也不起作用。

我希望能够传递一个参数或标签在cucumber.yml配置文件来调用只有一个全局钩子,如:

basicuser_overviewtests_ie: --tags @basic @overview @ie 

basicuser_overviewtests_ff: --tags @basic @overview @firefox 

Basicuser_newpagetests_ie: --tags @basic @newpage @ie 

等......前两个标签将参考到场景,第三个到正确的env.rb钩子。或者,如果我可以从配置文件传递一个变量,那也可以。但我无法弄清楚如何在那里使用环境变量。

我错过了什么吗?这是足够的信息来解释这个问题吗? 谢谢!


UPDATE:问题的部分似乎是黄瓜不承认[支持]文件夹中时,它是在同一水平[特点]文件夹,它需要的是在[功能]。我曾经说过,在相同的级别而不是内部功能上,它会是好的。并非如此。

所以,现在我可以让我的三个全局挂钩让浏览器运行,但标记并不会帮助,即使标记为仅在特征标记为@ie之前运行,或者标记为仅运行@即。

回答

8

编辑:pp。147-148从The Cucumber Book使我相信,这应该工作:

Before ('@ie') do 
    @browser = Watir::Browser.new :ie 
end 

我没有测试过,不过那可能会得到你想要的东西,如果你想通过浏览器作为一个标签。


我无法弄清楚如何阅读标签,但我认为可能有办法做到这一点。如果我在The Cucumber Book遇到它,我会更新你。我结束了使用环境变量。以下是我做的:

case ENV['BROWSER'] 
    when 'ie', 'Internet Explorer' 
    browser = Watir::Browser.new :ie 
    when 'ff', 'Firefox' 
    browser = Watir::Browser.new :ff 
    when 'chrome' 
    browser = Watir::Browser.new :chrome 
    when 'opera' 
    browser = Watir::Browser.new :opera 
    when 'debug' 
    debug_profile = Selenium::WebDriver::Firefox::Profile.new 
    debug_profile.add_extension 'features/support/firebug.xpi' 
    browser = Watir::Browser.new :firefox, :profile => debug_profile 
    else 
    browser = Watir::Browser.new :ie 
end 

Before do 
    @browser = browser 
end 

at_exit() do 
    browser.close 
end 

然后,我只是通过在BROWSER=<browser>在命令行上。有关我使用ENV变量所做的更深入讨论,可以阅读我写的here的博文。

+0

它的工作,谢谢!看起来我正处于正确的轨道上 - 我试图使用环境变量,但是我没有正确的语法,于是我转向标记,这并不奏效。这完全按照我的需要工作,并且您的博客文章帮助了很多 - 它与我正在进行的测试类似。再次感谢你! – 2012-04-23 17:38:50

+0

太棒了!很高兴我能帮上忙。如果你还没有,拿起黄瓜书。这对我很有帮助。 – 2012-04-23 19:26:32