2015-09-19 49 views
0

我是Selenium的新手,嘗試設置一些PageObjects。現在,我有兩個PageObjectsLoginProjectIndex。在Login.rb中,我有一個方法successful_login填寫一個電子郵件地址,然後單擊一個登錄按鈕,該按鈕顯示項目索引頁面。我的理解是,點擊登錄應該返回ProjectIndex的實例,但我似乎無法得到這個工作。當測試運行時,我收到以下錯誤:Selenium - 返回代表目標頁面的新頁面對象

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)>' 

這裏是我的測試(在login_spec.rb):

it 'succeeded' do 
@login.successful_login '[email protected]' 
expect(@project_index.loaded?).to be true 
end 

/pages/login.rb文件:

class Login < Base 
... 
def successful_login(email) 
    send_keys EMAIL_INPUT, email 
    click SIGNIN_BUTTON 
    @project_index = ProjectIndex.new(@driver) 
end 
... 
end 

/pages/project_index.rb文件:

class ProjectIndex < Base 
... 
def loaded? 
    wait_for(6) { displayed? NAVIGATION_BAR } 
end 
... 
end 

謝謝,任何幫助表示讚賞!

回答

0

login_spec.rb,嘗試這樣的事:(注意,您需要在驅動程序通過,除非你是在login.rb設置@driver)

@project_index = @login.successful_login '[email protected]', driver 
expect(@project_index.loaded?).to be true 

然後在/pages/login.rb做到這一點:

def successful_login(email, driver) 
    send_keys EMAIL_INPUT, email 
    click SIGNIN_BUTTON 
    ProjectIndex.new(driver) 
end 
+0

謝謝@stytown!當我在'login_spec.rb'中使用'@ driver'時,它可以工作: '@project_index = @ login.successful_login'[email protected]',@driver expect(@project_index.loaded?)。真' 不知道這是什麼意思關於我的設置,但似乎工作正常。 –

+0

太棒了,很高興它的工作!你介意點擊左邊的複選標記讓人們知道你的問題得到了回答嗎? – stytown