12

के माध्यम से बूटस्ट्रैप मोडल्स के साथ बातचीत करने में समस्या रेलवे अनुप्रयोग में मैंके साथ capybara-webkit ड्राइवर के साथ Capybara का उपयोग कर jQuery TokenInput field के साथ के साथ परीक्षण करने की कोशिश कर रहा हूं। बटनCapybara (v2)

click_link 'Create Team Modal' 
sleep 1 

within('div#modal_popup') do 
    fill_in 'input#token-input-team_name', with: 'Fancy team name' 
    sleep 1 
    fill_in 'input#token-input-team_name', with: '\t' 
    sleep 1 

    click_button 'Create Team' 
end 

page.should have_content('Fancy team name') 
  • क्लिक करें किसी टीम का नाम
  • साथ TokenInput में मोडल
  • भरण पाने के लिए एक टैब कुंजी प्रेस अनुकरण यह चयनित
  • बनाएं पाने के लिए: प्रश्न में भाग इस प्रकार है टीम
  • नाम सत्यापित करें पेज

यह केवल काम पर दिखाई देता है उन सभी sleep 1 एस जगह के साथ; अन्यथा कैपिबरा have_content पर दुर्घटनाग्रस्त हो जाता है, जिसके परिणामस्वरुप सर्वर त्रुटि होती है क्योंकि टीम का नाम कभी भी सही तरीके से नहीं चुना जा सकता था। अन्य बूटस्ट्रैप मोड के बिना एक टोकन इनपुट फ़ील्ड को लोड होने से पहले sleep 1 की आवश्यकता नहीं है।

उन सभी के साथ, क्या नींद से छुटकारा पाने का कोई तरीका है और यह सामान्य के रूप में आगे बढ़ रहा है? Capybara 2 wait_until (अच्छे कारण के साथ) बाहर ले लिया क्योंकि यह कुछ के लिए परीक्षण करने के लिए डिफ़ॉल्ट प्रतीक्षा समय के भीतर इंतजार करेगा ... लेकिन यह मेरे उपर्युक्त परीक्षण में दिखाई नहीं दे रहा है; ऐसा लगता है कि कैपिबारा इस मोडल में प्रवेश/बाहर निकलने पर उस प्रतीक्षा अवधि में संलग्न नहीं है। किसी के भी पास इस के साथ कोई भी अनुभव है? रेल 3.2.10 का उपयोग, रुपेक 2.12, कैपिबारा 2, कैपिबरा-वेबकिट 0.14.0, टोकन इनपुट 1.6।

+2

यह सहायक हो सकता है: http://blog.crowdint.com/2013/09/20/poltergeist-and-bootstrap-modals.html – Matt

उत्तर

10

परीक्षण env में एनिमेशन अक्षम करने का प्रयास, लेआउट/applicaiton.html.erb

<% if Rails.env.test? %> 
<style type="text/css"> 
    .modal.fade, .fade { 
     -webkit-transition: opacity 0.01s; 
     -moz-transition: opacity 0.01s; 
     -ms-transition: opacity 0.01s; 
     -o-transition: opacity 0.01s; 
     transition: opacity 0.01s; 
    } 
</style> 
<%end%> 
+1

जैसा कि [croudint लेख] (http: // ब्लॉग) में बताया गया है। crowdint.com/2013/09/20/poltergeist-and-bootstrap-modals.html) कि @matt लिंक किया गया है, यह एक अलग स्टाइलशीट में भी जा सकता है। –

+0

बूटस्ट्रैप का कौन सा संस्करण इस पर लागू होता है? मुझे एक ही समस्या का सामना करना पड़ रहा है, लेकिन मैं बूटस्ट्रैप 3 का उपयोग कर रहा हूं और उपर्युक्त सिफारिश मेरे लिए इस मुद्दे को हल नहीं कर रही है। – danielricecodes

+0

यह मेरे लिए बूटस्ट्रैप v3.0.2 – hooverlunch

8

मैं परीक्षण env में falowing सीएसएस जोड़ने के लिए सुझाव देते हैं:

div, a, span, footer, header { 
     -webkit-transition: none !important; 
     -moz-transition: none !important; 
     -ms-transition: none !important; 
     -o-transition: none !important; 
     transition: none !important; 
    } 

    .modal { 
    display: none !important; 
    } 

    .modal.in { 
    display: block !important; 
    } 

    .modal-backdrop { 
    display: none !important; 
    } 

इस में शरीर के और JS जोड़े :

$(".fade").removeClass("fade"); 

जिसने मेरी अधिकांश समस्याओं को कैपिबरा और बूटस्ट्रैप के साथ हल किया है।

+0

पर काम करता है 'यह भी आवश्यक था (मेरे मामले में)' मणि 'capybara-webkit'' – jmarceli

+0

का उपयोग करने के लिए यह सभी मामलों को शामिल करता है, स्वीकृत उत्तर के विपरीत – babonk

0

हम सिर्फ यह करना है और यह (उदाहरण के लिए $('.tp-header-login' पर क्लिक करने के) काम करने के लिए लगता है:

# instead of find(".tp-header-login") 

find(".tp-header-login") # still do the find so you are sure its loaded then... 
execute_script "$('.tp-header-login').click()" 
0

से बचने के लिए Rails.env.___? हैक्स * इच्छुक लोगों के लिए, निम्न लग रहा था काम करने के लिए (अब तक - उंगलियों को पार किया) बूटस्ट्रैप-आधारित मोडल पर jQuery UI drag-and-drop functionality परीक्षण के साथ समस्याओं से बचने में।

सबसे पहले, हम पहले से ही मोडल प्रकट करने के लिए के लिए "इंतज़ार कर", इस तरह एक सहायक विधि का उपयोग कर रहे थे:

def wait_for_modal_to_appear 
    modal = wait_until { 
    # Look for the modal by ID/whatever... 
    } 
    raise Capybara::ModalNotFound.new('...') if modal.nil? 
    return modal 
end 

फिर भी अभी भी, हम नकली मुद्दों कर रहे थे, जब की कोशिश कर खींचें और ड्रॉप उस मॉडल में तत्व।निम्नलिखित कोड अलावा, बस return लाइन से पहले कहा, लगता चाल किया है:

page.execute_script("document.getElementById('#{modal[:id]}').classList.remove('fade');") 

* बस इस तरह के एक हैक हाल ही में एक कंपनी मैं काम पर एक आपातकालीन तैनाती के लिए जरूरत के लिए नेतृत्व किया के साथ ... एक खराब कोड-परिवर्तन इसे उत्पादन में लाने में कामयाब रहा क्योंकि यह केवल if Rails.env.production? क्वालीफायर द्वारा सक्रिय किया गया था; यह अन्यथा परीक्षण-सूट का आधा असफल रहा होगा।