2015-11-15 166 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類的一個實例變量,所以它不是在課堂內可以訪問。由於你已經進入課堂,所以課堂內部也沒有必要。