2016-04-27 165 views
0

這是我的測試,但即使@timeout_exception在代碼運行期間工作,在測試過程中它是空的。那麼如何測試這個變量是否被設置?@變量在Gherkins /黃瓜測試中爲空

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

這是bundle exec cucumber run的輸出。

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 

回答

0

硒有它自己的等待,如果它們設置得比你期望的等待少,那麼你永遠不會看到你期望的等待觸發。合理?

以下設定最大等待頁面加載到5秒

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

腳本超時是另一個(通常使用Ajax使用)

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

隱等待爲最大等待時間硒到等待元素上的操作完成。如果這首先觸發,那麼你的期望就會失敗。

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

我會建議設置implicit_wait高於測試前的超時時間,然後將其設置回來。順便說一句,如果你的超時提出異常,你將需要一個救援塊。