2011-04-10 57 views
0

我有两个场景的简单Cucumber特性。它使用watir-webdriver执行基本登录和注销。第一种情况(登录)运行良好,watir方法执行没有问题。当第二个方案中运行(通过运行该功能为一体),我得到:在特性中运行第二个场景时的Cucumber NoMethodError

NoMethodError: undefined method `wait_until' for nil:NilClass

玩这个围绕透露,在第二种情况下,任何调用的Watir-webdriver的方法抛出这个错误,而同方法在第一种情况下很好。我假设我有一个范围问题,并尝试在我的第二个方案的步骤定义中“require'watir-webdriver'”无济于事。我已经包含了这两种情况的步骤定义。我更新了所有的宝石,并在Ruby 1.9.2上尝试过Cucumber 0.10.0和0.10.2。

对不起;对于ruby/cucumber/watir,我很新,并且在发布之前已经尝试将其排除几个小时。非常感谢您的任何建议!

require "watir-webdriver" 

Given /^I have the proper credentials$/ do 
    @username = "matt" 
    @password = "abc123" 
end 
When /^I am on the login page$/ do 
    @browser = Watir::Browser.new(:firefox) 
    @browser.goto ("http://dev.example.net") 
end 
When /^I enter username and password$/ do 
    @browser.text_field(:class, /x-form-field x-form-text/).set @username 
    @browser.text_field(:index, 1).set @password 
    sleep 1 
    @browser.button(:text, 'Login').click 
end 
Then /^I should should be granted access$/ do 
    @browser.wait_until { @browser.text.include? "Global Priorities" } 
    fail unless @browser.text.include? 'Global Priorities' 
end 

Given /^I am currently logged in$/ do 
    @browser.wait_until { @browser.text.include? "Welcome: #{@username}" } 
    fail unless @browser.text.include? "Welcome: #{@username}" 
end 
When /^I click the Log Out button$/ do 
    @browser.button(:text, "Log Out").click 
end 
Then /^I should be logged out$/ do 
    pending 
end 
+0

我通过设置我的env.rb文件来启动浏览器实例(对所有场景通用),然后从步骤本身中删除新的浏览器实例,对此进行了排序。谢谢。 – Matt 2011-04-10 13:51:11

回答

1

马特,看起来你现在已经明白了。每当你看到一个关于nil的未定义方法的错误时:NilClass - 这意味着无论试图使用那个方法都不再存在去处理。

这可能意味着您正在为浏览器对象使用错误类型的变量(实例/类/全局),或者您在第二次运行期间将该浏览器定义为某个未被访问的位置。