2015-11-15 118 views
0

我已经开始了Rspec,Capybara的简单例子。我遇到过几个问题。这个问题可能是因为我有cucumberpage_object gem的经验,但在这里我使用的是capybaraSite_prism gemRspec,水豚入门问题

我曾尝试: my_example_spec.rb require_relative '支持/ spec_helper' require_relative '页/ login_page'

describe 'My behaviour' do 

    it 'should do something'do 
    @login_page = LoginPage.new 
    @login_page.load 
    @login_page.login('autouser','password') 
    end 
end 

login_page.rb

class LoginPage < SitePrism::Page 

set_url "/login" 

    element :username, "input[id='username']" 
    element :password, "input[id='password']" 
    element :submit, "input[id='submit']" 

    def login(username,password) 
    @login_page.username.set username 
    @login_page.password.set password 
    @login_page.submit.click 

    end 

end 

问题是:

  1. 当我运行my_example_spec.rb提示错误

    Testing started at ... 
    Run options: include {:full_description=>/My\ behaviour\ should\ do\ something/} 
    
    NoMethodError: undefined method `username' for nil:NilClass 
    ./pages/login_page.rb:10:in `login' 
    ./my_example_spec.rb:11:in `block (2 levels) in <top (required)>' 
    -e:1:in `load' 
    -e:1:in `<main>' 
    
  2. 它不应该是on(LoginPage).login (autouser, password)。它应该导航到页面并运行login方法。这是它在page_object gem如何工作什么的site_prism gem

+0

它的意思是你的'login'方法中的@ login_page是零。定义在哪里? – Anthony

+0

'login_page.rb'是代码中上面显示的LoginPage的类文件。一切正常,它启动浏览器,加载URL(即'@ login_page.load')。如果'login_page'类出现问题,那么'.load'将不起作用。所以我认为我调用'login'方法的方式有些问题。对第二个查询还有什么想法吗? – paul

回答

0

相当于在LoginPage类的登录方法应该是

def login(username,password) 
    username.set username 
    password.set password 
    submit.click 
end 

@login_page是不LoginPage类的一个实例变量,所以它不是在课堂内可以访问。由于你已经进入课堂,所以课堂内部也没有必要。