2011-11-17 10 views
6

मैं एकीकरण परीक्षण के लिए अपने रेल आवेदन के परीक्षण के लिए capybara का उपयोग कर रहा हूँ। मेरे आवेदन में कई लाइटबॉक्स और अजाक्स और जेएस कॉल हैं।कैपिबरा परिदृश्य में प्रतीक्षा स्थिति कैसे जोड़ें?

@javascript 
    Scenario: I agree functionatilty 
    Given I go to the create account page 
    When I click on button which is given as image "lnkTerms2" 
    And I follow "i_agree" 
    Then I go to the create account page 
ऊपर कोड lnkTerms2 में

यहाँ है और आईडी जो js फ़ंक्शन को कॉल किसी लाइटबॉक्स खोलने के लिए में मदद मिलेगी। और मैं के रूप में

Element is not currently visible and so may not be interacted with (Selenium::WebDriver::Error::ElementNotDisplayedError) 
     [remote server] resource://fxdriver/modules/atoms.js:9519:in `unknown' 
     [remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:256:in `unknown' 
     [remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:305:in `unknown' 
     [remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:320:in `unknown' 
     [remote server] file:///tmp/webdriver-profile20111117-6876-18cfcfp/extensions/[email protected]/components/nsCommandProcessor.js:197:in `unknown' 
     (eval):2:in `send' 
     (eval):2:in `click_link' 
     ./features/step_definitions/web_steps.rb:300:in `/^I click on button which is given as image "([^"]*)"$/' 
     features/Sign_up_process.feature:61:in `When I click on button which is given as image "lnkTerms2"' 

समस्या है इस समारोह webdriver में कहा जाता है के रूप में, यह जावास्क्रिप्ट और ajax कॉल लोड करने के लिए समय हो रही है एक त्रुटि हो रही है। और लाइटबॉक्स नहीं खुल रहा है। तो कृपया मुझे कोई समाधान सुझाएं।

इसके अलावा मान लीजिए अगर मैं लाइन

When I click on button which is given as image "lnkTerms2" 

तो 4 से 5 बयान के बाद लिखना यह ठीक काम कर रहा है के रूप में यह js लोड करने के लिए समय हो जाता है।

उत्तर

3

कदम के बाद एक विराम के लिए प्रतीक्षा करने के लिए ajax कोशिश:

And I wait 5 seconds 

आपका अगला कोड web_steps.rb को जोड़ना होगा: आशा में

When /^I wait (\d+) seconds?$/ do |seconds| 
    sleep seconds.to_i 
end 
+4

यह एक अच्छा समाधान नहीं है, यह आपके परीक्षण निष्पादन में मजबूर देरी जोड़ रहा है, अगर इसका पुन: उपयोग किया जाता है तो इसमें बहुत समय लग सकता है। इस समस्या को हल करने का सही तरीका एक तत्व दिखाई देने तक प्रतीक्षा कर रहा है। – Benja

+4

निश्चित नींद का कोई भी रूप, भले ही यह परिदृश्य से मूल्य ले रहा हो, आम तौर पर एक भयानक विचार है, जब तक परिदृश्य वास्तव में उपयोगकर्ता अनुभव के बारे में नहीं है जिसमें उस विशिष्ट समय का इंतजार करना शामिल है (प्रदर्शन के लिए प्रदर्शन की प्रतीक्षा के विपरीत। , उदाहरण के लिए 'सिंकिंग') –

1

सेकंड की एक निश्चित संख्या के लिए प्रतीक्षा की जा रही है कि अपने परिदृश्य पर्याप्त तेज़ होगा सबसे अच्छी रणनीति नहीं है, क्योंकि इससे यादृच्छिक परीक्षण विफलताओं का कारण बन सकता है। मैं जब तक कुछ शर्त के बजाय पूरा किया जाता है आप प्रतीक्षा करने के लिए सलाह देते हैं:

And I wait until '#meow' is visible 

#... 
When /^I wait until '([^']+)' is visible$/ do |selector| 
    wait_until do # you can also specify timeout here 
    find(selector).visible? 
    end 
end 
+7

प्रतीक्षा_until Capybara 2 –

+0

में उपलब्ध नहीं है, निश्चित प्रतीक्षा के बारे में सामान्य बिंदु खराब रहना सच है। यहां चर्चा देखें: https://groups.google.com/forum/?fromgroups=#!topic/ruby-capybara/qQYWpQb9FzY क्यों उन्होंने प्रतीक्षा_until हटा दिया .. –

+2

'ढूंढें (चयनकर्ता) '' wait_until के बजाय पर्याप्त है 'Capybara.ignore_hidden_elements = true' अगर ब्लॉक करें। यदि यह गलत है, तो 'ढूंढें (चयनकर्ता, दृश्यमान: सत्य) ' –

12

आम तौर पर तय हो गई सोता/प्रतीक्षा करता है एक बुरी बात कर रहे हैं .. वे एक जानवर बल दृष्टिकोण हैं कि भंगुर लिपियों, धीमी गति से स्क्रिप्ट, या अक्सर दोनों में या तो परिणाम है। यदि आप उन्हें काफी देर तक सेट नहीं करते हैं तो कभी-कभी ब्रेक का परीक्षण करते हैं, यदि आप उन्हें बहुत लंबा सेट करते हैं, तो परीक्षण कभी नहीं तोड़ते हैं लेकिन वे सभी निश्चित अंगूठे के समय के कारण धीमे होते हैं।

अधिकांश स्वचालन उपकरण या तो की देखभाल स्वतः इंतजार कर रहे हैं, या वे

A recent blog posting by JNicklas explanes इस संबंध में Capybara करने के लिए कुछ हाल के बदलाव आपके अनुप्रयोग के साथ अपनी स्क्रिप्ट सिंक्रनाइज़ करने के लिए और अधिक सुंदर तरीके प्रदान करते हैं करने के कुछ तरीके के कुछ उदाहरण प्रदान करता है कुछ विशेष मामलों के लिए विशिष्ट प्रतीक्षा-के-हालत प्रकार का कोड करें, और सामान्य रूप से टूल के बारे में अधिक जानने के लिए और यह सामान, AJAX क्रियाओं और सिंक्रनाइज़ेशन के इंतजार के साथ कैसे व्यवहार करता है।

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