2015-06-11 33 views
0

我在最近的代碼中遇到了一種奇怪的gremlin。隨機地,它會在一段代碼中轉儲一個「堆棧級別太深(SystemStackError)」錯誤,該代碼有時會在以前,有時會在工作之前。我已經閱讀了涉及堆棧級別的類似線程,但似乎無法找到我的問題。有一個遞歸發生在某處,但它似乎並不一致。隨機堆棧層次太深(SystemStackError)

的兩種最常見的錯誤點:

stack level too deep (SystemStackError) 
     ./features/step_definitions/login.rb:40:in `/^I enter username "([^"]*)"$/' 
     features/01_login.feature:30:in `When I enter username "John"' 



stack level too deep (SystemStackError) 
     ./features/step_definitions/login.rb:23:in `/^I press select env$/' 
     features/01_login.feature:26:in `Then I press select env' 

運行我的測試的第一個錯誤會彈出一個包含用戶名,只有時刻前完成本次測試成功有。在重置後再次運行我的測試會導致第二個錯誤,這是更奇怪的,因爲測試需要運行直到這一點甚至到達我們在第一次運行中達到的用戶名。這個順序不一致。有時候,它只會在一個或另一個片斷上出錯,這使得難以追蹤。

上述兩個錯誤的代碼。

When (/^I enter username "([^"]*)"$/) do | username | 
     enter_text "UITextFieldLabel text:'Username'", "John" 
    end 

Then (/^I press select env$/) do 
     touch "label text:'Select Env'" 
    end 

回答

0

在每種情況下嘗試使用元素之前,您都需要等待很長時間。我碰到類似的問題,當我嘗試與尚未存在或尚未準備好與之交互的元素進行交互時,遇到一些method_missings並陷入循環。

有在葫蘆許多等待的方法,但在這種情況下,你可能想wait_for_element_exists

http://calabashapi.xamarin.com/ios/Calabash/Cucumber/WaitHelpers.html#wait_for_element_exists-instance_method

+1

以我的經驗,有時你需要使用有規律的睡眠,因爲wait_for將觸發之前的元素實際上是可見的。這不是一個好的解決方案,但它可能會有所幫助。 – Lasse

+0

在這些情況下,我寧願使用wait_for然後很短的睡眠,而不是長時間的睡眠,但你是對的。我認爲這是爲了處理可見的元素,但仍然處於屏幕過渡狀態,當葫蘆完成等待時,它只會在我測試過的應用程序中發生。 – alannichols

+0

是的,這是一個很好的組合方式。 – Lasse

相關問題