2012-12-24 39 views
10

मेरे पास UI सुविधाओं का परीक्षण करने के लिए एक ककड़ी परिदृश्य है। कभी-कभी कई मुद्दों में से एक के कारण, वेब पेज को प्रतिक्रिया देने में बहुत समय लगता है और कैपिबरा का समय निम्न त्रुटि से बाहर होता है।टाइमआउट पर पुनः प्रयास करें?

ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 

मेरा प्रश्न है-

मैं किसी भी तरह पूरे परिदृश्य या कदम (बार की लगातार संख्या के लिए) क्रमश: पुन: प्रयास करना, टाइमआउट त्रुटि पर ककड़ी परिदृश्य या Capybara मजबूर कर सकते हैं?

उत्तर

2

हो सकता है, आप इसे इस प्रकार कर सकते हैं:

Around do |scenario, block| 
    for i in 1..5 
    begin 
     block.call 
     break 
    rescue Timeout::Error 
     next 
    end 
    end 
end 

लेकिन मैं समझ नहीं इस कोड बग (It's not possible to call block several times in Around hook)

+0

उत्तर के लिए धन्यवाद। इस पोस्ट का दूसरा जवाब मेरे लिए काम करता था लेकिन मैं इसे ध्यान में रखूंगा। –

+0

+1 मैंने टाइमआउट :: केवल अपवाद के लिए त्रुटि को बदल दिया। निश्चित नहीं है कि टाइमआउट :: त्रुटि मेरे लिए इसे क्यों नहीं पकड़ रही थी>< – kikuchiyo

+0

कुछ कारणों से, टाइमआउट :: त्रुटि के साथ, यह अभी भी पकड़ा नहीं गया है। डालता बयानों में रखो, और यह केवल एक बार चलता है, और एक बार विफल रहता है ... ओह दर्द इस ऐप पर कैपिबारा/सेलेनियम/वेबकिट चलाने का दर्द! – kikuchiyo

1

The Cucumber book से की वजह से काम करता है:

जोड़ें एक eventually method जो कोड के ब्लॉक को चलाने की कोशिश करता रहता है जब तक कि यह या तो कोई त्रुटि उत्पन्न नहीं करता है या यह समय सीमा तक पहुंच जाता है।

यहाँ कि विधि के लिए कोड है:

module AsyncSupport 
    def eventually 
    timeout = 2 
    polling_interval = 0.1 
    time_limit = Time.now + timeout 
    loop do 
     begin 
     yield 
     rescue Exception => error 
     end 
     return if error.nil? 
     raise error if Time.now >= time_limit sleep polling_interval 
    end 
    end 
end 
World(AsyncSupport) 

पद्धति के रूप में एक step_definition से इस प्रकार कहा जा कहा जाता है:

Then /^the balance of my account should be (#{CAPTURE_CASH_AMOUNT})$/ do |amount| 
    eventually { my_account.balance.should eq(amount) } 
end 
+0

धन्यवाद! यह मेरी समस्या हल हो सकती है। अब और त्रुटियां नहीं मिल रही हैं। –

+0

खुशी है कि यह सहायक था! उत्तर को चिह्नित करने के रूप में चिह्नित करें अगर उसने आपकी मदद की है। –

संबंधित मुद्दे