2012-06-29 29 views
20

पर क्लिक करने के लिए rspec में capybara का उपयोग कैसे करें मैं अनुरोध spec बनाने में मदद के लिए रेल 3.2.3 और capybara पर रूबी का उपयोग कर रहा हूँ। मेरा लक्ष्य एक spec अनुरोध बनाना है जो लॉग आउट का परीक्षण करता है। वेब पेज:एक ड्रॉपडाउन विकल्प

<li class="dropdown"> 
    <a class="dropdown-toggle" data-toggle="dropdown"> 
    Welcome <%= current_user.first_name + " "+ current_user.last_name%> 
    <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
    <a href="#"> 
     <%= link_to "Sign out", destroy_user_session_path, :method => :delete%> 
    </a> 
    </ul> 
</li> 

परीक्षण के लिए, मैं

describe "sign out" do 
    it "should let user to sign out" do 
    login_as user, :scope => :user 
    # click_on "Welcome #{user.first_name} #{user.last_name}" 
    # Now click on Sign out 
    end 
end 

है मैं पर capybara का उपयोग कर साइन आउट करें क्लिक करने के लिए कैसे, क्योंकि यह एक ड्रॉप डाउन मेनू में दिखाई नहीं देता है, इसलिए पता नहीं है पृष्ठ पर। क्या कोई जानता है ?

क्या ड्रॉपडाउन मेनू में किसी तत्व पर क्लिक करने का कोई अन्य तरीका है?

+0

मैंने विशिष्ट लिंक टैग का चयन करके एक ही समस्या (ट्विटर बूटस्ट्रैप बटन ड्रॉप डाउन मेनू पर) हल किया है: 'ढूंढें (' ए ',: टेक्स्ट => विकल्प_शीर्षक) .click' –

उत्तर

5

हैलो मैंने अंततः इसे समझ लिया। लिंक खोजने के लिए मुझे xpath का उपयोग करना पड़ा। ऊपर html के आधार पर, यहाँ है मैं क्या किया:

rspec में, मैं ने लिखा है:

page.find(:xpath, "//a[@href='/users/sign_out']").click 

कारण मैं उपयोग "// एक [@href = '/ उपयोगकर्ताओं/sign_out']" है क्योंकि link_to "Sign out", destroy_user_session_path, :method => :delete को वेब पेज पर <a href="https://stackoverflow.com/users/sign_out" ... पर संकलित किया गया है। दोनों बस क्लिक करके http://www.suffix.be/blog/click_image_in_link_capybara

+0

मैं दो क्लिक करके एक बहुत ही समान ड्रॉपडाउन का परीक्षण करने में सक्षम हूं, ड्रॉपडाउन खोलने के लिए एक और लिंक पर क्लिक करने के लिए एक। – DVG

+1

यही मैंने सोचा था। क्या आप कुछ कोड पोस्ट कर सकते हैं? यह बहुत अच्छा होगा अगर इसे उपरोक्त एचटीएमएल पर लागू किया जा सकता है। धन्यवाद। – qusr

+0

मेरा मानना ​​है कि यहां लापता टुकड़ा अनुरोध स्पेस के लिए जावास्क्रिप्ट को सक्षम कर रहा है; आमतौर पर कैपिबरा-वेबकिट (https://github.com/thoughtbot/capybara-webkit)। एक बार यह सक्षम हो जाने के बाद, क्लिक काम करेंगे क्योंकि आपके ब्राउज़र ने उन्हें काम किया है। –

7

मैं एक लटकती परीक्षण किया है लिंक

click_link "Welcome #{current_user.first_name} #{current_user.last_name}" 
click_link 'sub link' 
+0

आप "ड्रॉपडाउन लिंक" पर क्लिक कैसे करें। – qusr

+0

कुछ कोड – DVG

+5

जोड़ा जो काम नहीं किया। – qusr

4

एक बहुत:

और यह माध्यम से :-)

ओह काम करता है, मैं इस उपयोगी लिंक मिल गया आसान समाधान यह है:

चुनें ("विकल्प आप मेनू से चुनना चाहते हैं",: = = "लेबल नाम") से

नोट: "लेबल नाम" <label> का वास्तविक पाठ है। हालांकि, आप <select> के "आईडी" या "नाम" विशेषता का भी उपयोग कर सकते हैं, जो मुझे लगता है कि आप बेहतर हैं क्योंकि आप किसी बिंदु पर लेबल टेक्स्ट बदल सकते हैं और यदि आप करते हैं, तो आपके परीक्षण अभी भी पास हो जाएंगे।

+2

" चयन "गैर-एचटीएमएल चयन बॉक्स के लिए काम नहीं करता है तत्वों। प्रश्न "बटन ड्रॉप डाउन मेनू" (जैसे ट्विटर बूटस्पर एक) के बारे में है जो HTML चयन बॉक्स नहीं है। –

+2

यह उत्तर वास्तव में प्रश्न के शीर्षक को संबोधित करता है। मुझे लगता है कि यही कारण है कि इसका सबसे अधिक वोट है। –

+1

कोड एक चयन नहीं है, यह बूटस्ट्रैप का लॉगआउट कोड है। तो चयन करें काम नहीं करेगा – Dean

1

इस

find("ol.nya-bs-select.btn-default.form-control[ng-model='scope.values.countries']") 
    .find_button("Nothing selected").click 
1

के लिए मेरे उदाहरण मैं एक ऐसी ही समस्या थी, लेकिन मेरी लटकती किसी भी पाठ, केवल माउस नहीं था:

%li#user-menu.dropdown 
    %a.dropdown-toggle{ href: "#", data: { toggle: "dropdown" }, role: "button", aria: { haspopup: "true", expanded: "false" } } 
    %i.fa.fa-user 
    %span.caret 
    %ul.dropdown-menu 
    %li.logout-text= link_to "Log Out", destroy_user_session_path, :method => :delete 

मेरी कल्पना मैं प्रयोग किया जाता में:

def when_I_sign_out 
    find('#user-menu').click 
    click_on 'Log Out' 
end 

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

  • कोई संबंधित समस्या नहीं^_^