2013-01-16 12 views
7

मेरे परीक्षण में मेरे पास एक कदम है जहां मैं एक फ़ील्ड भरता हूं और एंटर दबाता हूं। यह फ़ील्ड फिर अगले पृष्ठ पर एक परिणाम सेट देता है।क्या कैपिबरा में नींद का उपयोग करने का कोई बेहतर विकल्प है?

यहाँ मेरी सहायक विधि है:

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
end 

उसके बाद मैं एक कदम है कि बस का कहना है:

page.should have_content(tutor) 

हालांकि, मुद्दा है कि भले ही साथ अपने पृष्ठ लोड के बाद पेज परिणाम, इसके बाद चरण गुजरता है भले ही यह गलत हो। मैंने चरण में एक डीबगर सेट किया है और जब मैं इसे मैन्युअल रूप से जांचता हूं, तो दावा विफल रहता है क्योंकि मैं भी इसकी अपेक्षा करता हूं। मेरी धारणा यह है कि अगला चरण पृष्ठ से पहले भी पुनः लोड हो रहा है। मैं इसे की तरह लग रहे बनाने के लिए मेरे खोज विधि के अंत में एक नींद रखा:

def search(term) 
    fill_in('query-text', :with => term) 
    click_button('search-button') 
    sleep 5 
end 

लेकिन मुझे लगता है कि नींद का उपयोग कर इस समस्या को हल करने के लिए एक hacky तरीका है। मैं Capybara 2 का उपयोग कर रहा हूँ तो wait_until का उपयोग हटा दिया गया है। क्या नींद पर भरोसा करने के बजाय इस मुद्दे को संभालने का कोई बेहतर तरीका है?

उत्तर

-1

हां, तो आप कर रहे हैं सही wait_until निकाल दिया जाता है, नई विधि #synchronize है, लेकिन मैं अभी यह :)

में नज़र

http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara

https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/base.rb#L44 कैसे उपयोग करने के लिए पता नहीं है

+0

पहला लिंक स्पष्ट रूप से बताता है कि 'सिंक्रनाइज़' के पास 'wait_until' की तुलना में बहुत अलग उपयोग है। – asymmetric

1

यह परीक्षण tutor पृष्ठ पर पहले से मौजूद है।

तो आपको tutor के लिए जांच नहीं करनी चाहिए, लेकिन कुछ और के लिए, उदा। टेक्स्ट tutor के साथ तत्व के लिए जो पृष्ठ रीलोड के बाद ही मौजूद है।

1

क्या आपके पास अपने HTML पृष्ठ में tutor टेक्स्ट छिपा हुआ है? has_content? एचटीएमएल में मौजूद किसी भी पाठ के लिए true लौटाता है, जिसमें छिपे हुए पाठ भी शामिल नहीं हैं। तो मैं इसे expect(page).to have_text(tutor) के साथ बदल दूंगा, जो केवल पृष्ठ पर दिखाई देने वाले टेक्स्ट के लिए जांच करता है। .text भी बहुत धीमी विधि है, इसलिए ये अतिरिक्त विभाजन सेकंड आपके लिए आसान हो सकते हैं।

एक और दृष्टिकोण, अपने कल्पना सहायकों में wait_until विधि बहाल करने के लिए है, क्योंकि यह वास्तव में ज्यादातर मामलों में काम दिया गया है:

def wait_until(timeout = DEFAULT_WAIT_TIME) 
    Timeout.timeout(timeout) do 
    sleep(0.1) until value = yield 
    value 
    end 
end 

किसी भी मामले में यह एक निश्चित समय समाप्ति के लिए हर बार इंतज़ार कर की तुलना में बेहतर हो जाएगा।

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