2012-01-06 9 views
22

मैं केवल कैपिबरा और रुपेक (कोई ककड़ी या सेलेनियम का उपयोग करके बटन के बिना एक फॉर्म जमा करने का प्रयास कर रहा हूं, मुझे पता है कि इसके बारे में पहले से ही एक सवाल है)।कैपिबारा - बटन के बिना एक फॉर्म सबमिट करें

मैंने देखा है वहाँ बटन के बिना एक फार्म जमा करने के लिए एक विधि जोड़ने के लिए एक सार है:

module SubmitRackTestFormWithoutButton 
    def submit_form! 
    Capybara::RackTest::Form.new(driver, form).submit({}) 
    end 
end 
Capybara::RackTest::Node.send :include, SubmitRackTestFormWithoutButton 

https://gist.github.com/989533, लेकिन मैं यह काम करने के लिए मिल गया नहीं है और मैं इस पर कोई टिप्पणी की:

मुझे अपरिभाषित विधि 'submit_form' मिलती है! # कैपिबारा :: नोड :: तत्व: ... वास्तव में "कैपिबरा :: रैकटेस्ट :: नोड.send: शामिल हैं, सबमिट करें रैकटेस्टफॉर्म विथआउट बटन" विधि सबमिट_फॉर्म! को नोड (तत्व के लिए नहीं) जोड़ा जाता है, लेकिन लगता है एक तत्व

लौट आपको लगता है कि सार बाहर काम करने के कुछ विचार है, या बटन के बिना एक फार्म जमा करने के लिए कुछ अन्य समाधान?

धन्यवाद

उत्तर

5

हालांकि इसे प्राप्त करने के लिए आप क्या capybara का उपयोग कर चाहते हैं संभव है, आसान और अधिक व्यावहारिक समाधान प्रपत्र पर एक बटन प्रस्तुत कर देना है।

फॉर्म पर कोई बटन नहीं होने का कोई कारण नहीं है, यह एक फॉर्म नहीं है और जिन उपयोगकर्ताओं के पास जीयूआई नहीं है या स्क्रीन पाठकों का उपयोग कर रहे हैं, उन्हें अन्यथा फॉर्म सबमिट करने में परेशानी होगी।

आप प्रपत्र बटन दिखाई दे सकता है, मैं कुछ सीएसएस का उपयोग कर इसे छिपा बनाने के लिए कर सकते हैं सुझाव नहीं करना चाहते हैं:,

<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"> 
+1

मुझे लगता है कि वह ऊपर की तरह खोज फ़ॉर्म की तरह कुछ परीक्षण कर रहा है। – Hauleth

+0

धन्यवाद मारियो, मैं आपसे सहमत हूं, लेकिन मैंने जीयूआई डिज़ाइन नहीं किया है और अब इसे बदलने के लिए संभव नहीं है (लेकिन मुझे इसका उपयोग करने वाले परीक्षणों को लिखने की आवश्यकता है) –

+1

कोई समस्या नहीं, बस स्क्रीन से बटन को स्थिति दें और फिर यह काम करना चाहिए :) –

22

सभी अपने उत्पादन कोड परीक्षण योग्य होना चाहिए इसलिए यदि आप एक कोड जोड़ने कि केवल परीक्षण की तुलना में परीक्षण के द्वारा प्रयोग किया जाता है कोई मतलब नहीं कर देगा ...

कोशिश के बजाय यह करने के लिए:

page.execute_script("$('form#your-form').submit()") 
+0

यदि आप जावास्क्रिप्ट ड्राइवर का उपयोग नहीं करते हैं तो यह कैसे काम करना चाहिए? ;) – siegy22

2

मैं इस के साथ capybara 1.1.2 में काम मिल गया:

+०१२३५१६४१०
form = page.find("form") 
    class << form 
    def submit! 
     Capybara::RackTest::Form.new(driver, native).submit({}) 
    end 
    end 
    form.submit! 

और जैसे एक समान समाधान यहाँ वर्णित है यह लग रहा है: इनपुट

find('form input').native.send_keys :enter 
2

आप ऐसा कर सकते हैं

click_on 'Sign up' 
3

यहां एक साधारण समाधान है जिसे कैपेबरी-वेबकिट, क्यूटी, एलएमएनओपी या जो कुछ भी आवश्यक नहीं है।

सबमिट बटन की आवश्यकता नहीं है। लोग कहते हैं कि आपको इसकी ज़रूरत है लेकिन जो भी हो।

बस एक वर्ग या

require 'support/capybara' 

before do 
    create :lead 
    create :user, :different_email 
end 

it 'Searchable' do 
    visit users_path 
    page.should have_content 'Slicer' 
    page.should have_content 'Dicer' 

    fill_in 'Search', with: 'dice' 

    form = find '#search-form' # find the form 
    page.submit form   # use the new .submit method, pass form as the argument 

    page.should have_content 'Dicer' 
    page.should_not have_content 'Slicer' 
end 

यह यहाँ पर jacob के जवाब की तरह थोड़े है, लेकिन उसके लिए आप को परिभाषित करने कि बीच में है दो

# /spec/support/capybara.rb 
    class Capybara::Session 
    def submit(element) 
     Capybara::RackTest::Form.new(driver, element.native).submit({}) 
    end 
    end 

की तरह कुछ तो फिर तुम क्या कर सकते हैं monkeypatch परीक्षण का।

इस समाधान के लिए, आप इसे किसी फ़ाइल में/समर्थन निर्देशिका में या उस spec की शुरुआत में परिभाषित कर सकते हैं, आदि। यह परीक्षण में अव्यवस्था को कम करता है।