0

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

1 回答 1

0

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

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

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

于 2015-06-15T09:48:10.087 回答