随机堆栈级别太深(SystemStackError)

random stack level too deep (SystemStackError)

我最近 运行 在我的代码中遇到了一个奇怪的问题。随机地,它会在一段代码上转储一个 "stack level too deep (SystemStackError)" 错误,该代码以前(有时是片刻之前)一直在工作。我已经阅读了 SO 中涉及堆栈级别的类似线程,但似乎找不到我的问题。某处发生了递归,但似乎并不一致。

最常见的两个错误点:

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'

运行 我的测试第一个错误会弹出用户名,在成功完成此测试之前只有片刻。 运行 我在重置后再次测试会出现第二个错误,这更加奇怪,因为测试需要 运行 通过这一点才能获得我们在第一个 [=21] 中达到的用户名=].这个顺序不一致。有时它只会在一个或另一个片段上出错,从而难以追踪。

有关两个错误的代码。

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

您很可能只需要等待,然后再尝试在每种情况下使用这些元素。我遇到了 运行 类似的问题,当我尝试与尚不存在或尚未准备好与之交互的元素进行交互时,我遇到了一些 method_missings 并陷入了循环。

葫芦中有很多等待方法,但在这种情况下,您可能需要 wait_for_element_exists

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