2013-01-25 84 views
0

請按照下面的代碼:driver.navigate.refresh不工作與硒的webdriver預期

driver.get "https://example.com/" 
driver.find_element(:class, "button").submit 
driver.navigate.refresh 
wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds 
element = wait.until { driver.find_element(:name => "username") } 

我寫的代碼在我牢記直到它包含element : username來的頁面,繼續前一頁刷新。但看起來我的代碼不符合該要求。因此腳本拋出如下錯誤「

錯誤

C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.27.2/lib/selenium/webdr 
iver/common/wait.rb:57:in `until': timed out after 10 seconds (Unable to locate 
element: {"method":"name","selector":"username"})} (Selenium::WebDriver::Error:: 
TimeOutError) 

什麼好主意來滿足我的要求嗎?

感謝,

+0

請分享幾行代碼。 – Manigandan

+0

如果我錯了,請讓我清楚。到達'element:username'後,您將刷新前一頁。 – Manigandan

+0

我的代碼是錯誤的。直到'element:username'頁面到來,我需要不斷刷新前一頁。 OMG! – CodeLover

回答

2

我還沒有碰到過一個內置來 - 在selenium-webdriver中這樣做,所以我會做以下事情:

#Submit your first page 
driver.get "https://example.com/" 
driver.find_element(:class, "button").submit 

#Refresh page until your element appears 
end_time = Time.now + 10 #seconds 
begin 
    element = driver.find_element(:name => "username") 
rescue Selenium::WebDriver::Error::NoSuchElementError 
    if Time.now < end_time 
     driver.navigate.refresh 
     retry 
    end 
end 

基本上這是試圖找到元素。如果找不到,則捕獲異常,刷新頁面並重新嘗試。重複此操作直到達到時間限制hsa。

+0

OMG!你給了什麼解決方案?這正是我期待的那一個。非常感謝:) – CodeLover

+0

'retry'聲明在這裏會做什麼? – CodeLover

+0

這意味着重新運行'begin'和'rescue'之間的代碼。所以在這種情況下,它說在頁面刷新後重試查找元素。 –