在功能中运行第二个场景时的黄瓜NoMethodError

时间:2011-04-10 13:00:20

标签: ruby cucumber watir

我有一个简单的Cucumber功能,有两个场景。它使用watir-webdriver执行基本登录和注销。第一个场景(登录)运行正常,并且watir方法执行没有问题。当第二个场景运行时(通过整体运行该功能),我得到:

  

NoMethodError:未定义的方法   `wait_until'代表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

1 个答案:

答案 0 :(得分:1)

马特,看起来你已经弄明白了。每当你看到关于nil的未定义方法的错误时:NilClass - 这意味着尝试使用该方法的任何东西都不再存在。

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