【问题标题】:random stack level too deep (SystemStackError)随机堆栈级别太深 (SystemStackError)
【发布时间】:2015-06-11 16:02:41
【问题描述】:

我最近在我的代码中遇到了一个奇怪的小问题。它会随机地在一段代码上转储一个“堆栈级别太深(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

【问题讨论】:

    标签: ios cucumber calabash stack-level


    【解决方案1】:

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

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

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

    【讨论】:

    • 根据我的经验,有时您需要使用常规睡眠,因为 wait_for 会在元素实际可见之前触发。这不是一个很好的解决方案,但它可能会有所帮助。
    • 在这些情况下,我更喜欢使用 wait_for 然后是非常短的睡眠而不是长时间的睡眠,但你是对的。我认为这与元素可见但在葫芦完成时仍处于屏幕转换状态有关,它正在等待,并且仅在我测试过的应用程序中有时才会发生。
    • 谢谢。我已经开始按照建议使用睡眠和等待的组合,它已经消除了堆栈级别的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2013-10-05
    • 2014-10-25
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多