Ruby on rails Selenium-返回表示目标页面的新页面对象

Ruby on rails Selenium-返回表示目标页面的新页面对象,ruby-on-rails,ruby,selenium,Ruby On Rails,Ruby,Selenium,我是Selenium新手,正在尝试设置一些页面对象。现在,我有两个页面对象:Login和ProjectIndex。在Login.rb中,我有一个成功登录的方法,它填充一个电子邮件地址,然后单击一个登录按钮,它显示项目索引页面。我的理解是,单击“登录”应该返回ProjectIndex的一个实例,但我似乎无法让它正常工作。当测试运行时,我得到以下错误: 1) Login succeeded Failure/Error: expect(@project_index.loaded?).t

我是Selenium新手,正在尝试设置一些页面对象。现在,我有两个页面对象:Login和ProjectIndex。在Login.rb中,我有一个成功登录的方法,它填充一个电子邮件地址,然后单击一个登录按钮,它显示项目索引页面。我的理解是,单击“登录”应该返回ProjectIndex的一个实例,但我似乎无法让它正常工作。当测试运行时,我得到以下错误:

  1) Login succeeded
      Failure/Error: expect(@project_index.loaded?).to be true
       NoMethodError:
        undefined method `loaded?' for nil:NilClass
 # ./spec/login_spec.rb:22:in `block (2 levels) in <top (required)>'
My/pages/login.rb文件:

谢谢,非常感谢您的帮助

在login_spec.rb中,尝试以下操作:注意,除非您在login.rb中设置@driver,否则您需要传入驱动程序

 @project_index = @login.successful_login 'victor@something.com', driver
 expect(@project_index.loaded?).to be true
然后在/pages/login.rb中执行以下操作:


谢谢@stytown!当我在login\u spec.rb中使用@driver时,它会起作用,就像这样:@project\u index=@login.successful\u login'victor@honchodesign.com“,@driverexpect@project_index.loaded?.说实话,我不确定这对我的设置意味着什么,但似乎工作正常。太棒了,很高兴它工作了!你介意点击左边的复选标记让人们知道你的问题已经得到了回答吗?
class Login < Base
 ...
 def successful_login(email)
   send_keys EMAIL_INPUT, email
   click SIGNIN_BUTTON
   @project_index = ProjectIndex.new(@driver)
 end
...
end
class ProjectIndex < Base
...
 def loaded?
  wait_for(6) { displayed? NAVIGATION_BAR }
 end
...
end
 @project_index = @login.successful_login 'victor@something.com', driver
 expect(@project_index.loaded?).to be true
def successful_login(email, driver)
   send_keys EMAIL_INPUT, email
   click SIGNIN_BUTTON
   ProjectIndex.new(driver)
end