在Gherkins / Cucumber测试中@变量为空

时间:2016-04-27 11:21:14

标签: ruby cucumber

这是我的测试,但即使@timeout_exception在代码运行期间有效,它在测试期间也是空的。那么如何测试是否设置了这个变量呢?

Then(/^the output should be '(.*)'$/) do |expectedException|
  expect(@timeout_exception).to eq(expectedException)
end

这是捆绑exec黄瓜运行的输出。

And the output should be 'Execution Timeout Error: This deployment has taken too long to run'                                     # features/step_definitions/my_steps.rb:309

  expected: "Execution Timeout Error: This deployment has taken too long to run"
       got: nil

  (compared using ==)
   (RSpec::Expectations::ExpectationNotMetError)
  ./features/step_definitions/my_steps.rb:310:in `/^the output should be '(.*)'$/'
  features/timeout_lengthy_deploys.feature:25:in `And the output should be 'Execution Timeout Error: This deployment has taken too long to run''

Failing Scenarios:
cucumber features/timeout_lengthy_deploys.feature:11 # Scenario: Normal deploy that times out because it takes too long

1 个答案:

答案 0 :(得分:0)

Selenium有自己的等待,如果它们的设置低于你预期的等待,那么你永远不会看到你的预期等待被触发。有意义吗?

以下设置页面加载的最长等待时间为5秒

@browser.driver.manage.timeouts.page_load = 5

脚本超时是另一种(通常与Ajax一起使用)

@browser.driver.manage.timeouts.script_timeout = 5
@browser.execute_script("return jQuery.active")

隐式等待是Selenium等待元素上的操作完成的最长等待时间。如果这首先触发,那么你的期望就会失败。

@browser.driver.manage.timeouts.implicit_wait = 5

我建议将implicit_wait设置为高于测试之前的超时,然后再将其设置回来。顺便说一句,如果您的超时引发异常,您将需要一个救援区。