2015-04-04 47 views
0

這是我失敗的代碼。wait_until塊給出超時錯誤

link(:continue, :text => 'Continue Shopping') 

def verify_cart 
    wait_until(60) do 
     continue_element.visible? 
    end 
    end 

爲了使它工作,我在這裏試圖解決方案: Inconsistently getting error (Watir::Wait::TimeoutError)Timeout::Error in Rails application using Watir但沒有爲我工作。

我也嘗試過增加時間。

然後我試圖通過增加在implicit wait從3秒到20秒,而不是使用wait_until塊我簡單地使用.visible?它的工作。

link(:continue, :text => 'Continue Shopping') 

continue_element.visible? 

#def verify_cart 
# wait_until(60) do 
#  continue_element.visible? 
# end 
# end 

現在的問題是,當元素在那裏,爲什麼wait_until不停失敗?

+0

@JustinKo你可以把你的想法放在這裏。 – paul 2015-04-06 19:16:52

+0

這是什麼意思,通過使用'continue_element.visible?'而不是'wait_until(60){continue_element.visible? }'工作?是否意味着異常消失,並且腳本的後續步驟按預期工作? 'continue_element.visible?'只是返回元素是否存在。如果您只是簡單地移除了'verify_cart'方法的'wait_until'部分,那麼根據腳本的寫入方式,即使鏈接不存在,'verify_cart'也可能會通過。 – 2015-04-06 19:38:01

+0

@JustinKo元素總是在那裏,它是可見的(我已經測試過)。現在的問題是,當我把這個語句'continue_element.visible?'從'wait_until'中移出時阻止它,但是當我把它放入它時,它會給出超時錯誤。 – paul 2015-04-07 07:17:03

回答

0
continue_element.visible? 

不會引發錯誤,它只是返回一個布爾值。這聽起來像這個元素實際上並沒有最終可見,這仍然會引發錯誤,無論隱含等待:

raise unless continue_element.visible? 

而且,這是一個更好的模式是:

continue.wait_until_present 

continue.when_present.click 

.present?只是意味着.exists? & & .visible?這實際上是什麼你想要的,這種模式會給你一個更好的錯誤信息。

+0

我已經知道'.present?','.visible?'和'.exists?'之間的區別了。你錯了'.visible?'。給出錯誤'Watir :: Exception :: UnknownObjectException:在失敗時無法找到元素',我測試了它。最後,問題仍然存在**爲什麼wait_until()**不工作。 – paul 2015-04-04 21:07:25

+0

#visible?如果不存在則給出錯誤,如果存在並且不顯示則返回false。 #present?如果它不存在或者不存在並且不可見,則爲它不存在的情況解救錯誤並返回false。 聽起來你的元素實際上並不可見。你能睡60天,除非element.present? – titusfortner 2015-04-05 02:27:21

+0

@paul,我認爲你對'visible?'的評論混淆了Watir和Page-Object API。如果元素不存在,Watir的'visible?'會拋出異常。然而,Titus是正確的,'continue_element.visible?',即頁面對象代碼,如果元素不存在,將返回false。儘管有這個名字,但Page對象的可見?方法實際上調用了Watir的'present?'方法。 – 2015-04-06 19:30:06

相關問題