2011-11-02 18 views
5

को पूरा करने के लिए AJAX अनुरोध की प्रतीक्षा नहीं कर रहा है, मैं चुनिंदा टैग से एक विकल्प चुनने का परीक्षण करने का प्रयास कर रहा हूं (ये विकल्प दूरस्थ डेटाबेस सर्वर से प्राप्त किए गए हैं)। वेबसाइट के साथ सामान्य बातचीत के दौरान, यह इस ड्रॉपडाउन को पॉप्युलेट करने के लिए एक सेकंड के एक से अधिक अंश नहीं लेता है। हालांकि, जब मैं निम्नलिखित परीक्षण चलाने,Capybara

 


    When /^(?:|I)select "([^"]*)" from "([^"]*)" in search form$/ do |value, field| 
     within "#select_container" do 
     save_and_open_page 
     page.should have_css("#criteria_div_code > option:nth-child(10)") 
     select(value, :from => field) 
     end 
    end 

 

मैं निम्नलिखित त्रुटि मिलती है,

expected css "#criteria_div_code > option:nth-child(10)" to return something (RSpec::Expectations::ExpectationNotMetError)

लटकती कम से कम 20 विकल्पों के साथ से भर जाता है और तो मैं बस की उपस्थिति के परीक्षण 10 वां विकल्प (अभी के लिए)।

save_and_open_page दिखाता है कि कम से कम 10 के बजाय केवल एक विकल्प (डिफ़ॉल्ट विकल्प) मौजूद है और इसलिए "ExpectionNotMetError" आता है।

Capybara.default_wait_time = 30 - सूचियों के लिए पॉपुलर होने के लिए पर्याप्त समय।

कैपिबारा AJAX कॉल समाप्त होने की प्रतीक्षा नहीं कर रहा है?

क्या मुझे यहां कुछ याद आ रही है?

+0

क्या आपने परिदृश्य को '@ जावास्क्रिप्ट' के रूप में टैग किया है? – Chowlett

उत्तर

0

मैं तुम्हें ajax के परीक्षण के लिए उपयोगकर्ता js चालक की जरूरत है लगता है,

describe 'some stuff which requires js', :js => true do 
    it 'will use the default js driver' 
    it 'will switch to one specific driver', :driver => :celerity 
end 

यह भी ध्यान रखें निम्न पंक्ति - Capybara ब्लॉक और तुम्हारे जाने के बाद पृष्ठ के साथ संवाद किया है समाप्त करने के लिए अजाक्स अनुरोधों के लिए इंतजार कर सकते हैं। इस व्यवहार को सक्षम करने के लिए, सेट करें: ड्राइवर को विकल्प को पुन: सिंक्रनाइज़ करें।

2

आप AJAX resynchronization Using Capybara for AJAX integration tests के लिए टाइमआउट सेट करने के लिए मेरी प्रतिक्रिया जांचना चाहेंगे। पुन: सिंक्रनाइज़ेशन टाइमआउट 10secs पर डिफ़ॉल्ट होता है और यदि आपकी प्रतिक्रिया उस समय से पहले वापस नहीं आती है, तो आपको कोई प्रतिक्रिया नहीं मिलेगी, खासकर यदि आपने सेट किया है: अपनी कॉन्फ़िगरेशन में गलत पर पुन: सिंक्रनाइज़ करें। यदि आप पहले से निर्धारित: नीचे है कि समय समाप्ति सेट करने के लिए

Capybara.register_driver :selenium do |app| 
    Capybara::Selenium::Driver.new(app, :browser => :firefox, :resynchronization_timeout => 1000) 
end 

नोट एक टुकड़ा है गलत पर फिर से समकालित, आप सच को यह निर्धारित करने की आवश्यकता।

+2

'Capybara' संस्करण 2.0.3 के साथ यह इस त्रुटि का कारण बनता है:' अज्ञात विकल्प: {: resynchronization_timeout => 1000} (ArgumentError) ' – etagwerker

+0

@etagwerker आप सही हैं। : सेलेनियम ड्राइवर से सिंक्रनाइज़ विकल्प हटा दिए गए हैं और ऐसा संभवतः सेलेनियम ड्राइवर के नए संस्करण के लिए काम नहीं करेगा। उपरोक्त समाधान 2.0.3 से कम कैपिबरा संस्करणों के लिए सेलेनियम ड्राइवर के पुराने संस्करण के साथ था। –

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