2012-05-08 8 views
129

मैं एक उचित लेबल है कि मैं एक समस्या के बिना capybara साथ भर सकते हैं के साथ एक क्षेत्र है।मैं कैसे जांच सकता हूं कि कैपिबारा का उपयोग करके एक फॉर्म फ़ील्ड सही ढंग से प्रीफ़िल किया गया है?</p> <pre><code>fill_in 'Your name', with: 'John' </code></pre> <p>मैं इसे भरने से पहले मूल्य यह है की जाँच करना चाहते हैं और यह समझ नहीं कर सकते हैं:

अगर मैं fill_in के बाद निम्न पंक्ति जोड़ें:,

find_field('Your name').should have_content('John') 

कि परीक्षण में विफल रहता है, हालांकि भरने से ठीक पहले काम किया के रूप में मैं पेज को सहेज कर सत्यापित किया है।

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

expect(page).to have_xpath("//input[@value='John']") 

अधिक जानकारी के लिए http://www.w3schools.com/xpath/xpath_syntax.asp देखें:

उत्तर

159

आप एक विशेष मूल्य (जैसे 'जॉन') के साथ एक input तत्व हो, तो जाँच करने के लिए एक xpath क्वेरी उपयोग कर सकते हैं।

expect(find_field('Your name').value).to eq 'John' 

संपादित करें:

शायद एक खूबसूरत तरीके के लिए

(! आप होना चाहिए) आजकल मैं शायद का उपयोग करेंगे have_selector

expect(page).to have_selector("input[value='John']") 

आप पेज वस्तु पद्धति का उपयोग कर रहे हैं, तो

class MyPage < SitePrism::Page 
    element :my_field, "input#my_id" 

    def has_secret_value?(value) 
    my_field.value == value 
    end 
end 

my_page = MyPage.new 

expect(my_page).to have_secret_value "foo" 
+0

आह, मुझे 'value' बिट याद आ रहा था। धन्यवाद! –

+0

मुझे एक ही समस्या थी, लेकिन एक फार्म फ़ील्ड के बजाय एक div के साथ। किसी और को एक ही समस्या होने के लिए, find_by_id()। Text_field() मान के बजाय टेक्स्ट का उपयोग करें। यह मुझे लगता है कि यह मान केवल * फ़ील्ड पर काम करता है ... –

+8

बाद के तरीके में समस्या यह है कि यह कैपिबरा के मतदान चक्र का उपयोग नहीं करता है और इसलिए अगर फील्ड लंबे समय से चलने वाले जेएस कोड द्वारा सेट किया गया है तो तत्काल विफल हो जाएगा। पहला तरीका तब तक प्राथमिकता देना है जब तक कि आप इसे स्थिर रूप से जेनरेट किए गए फॉर्म पर नहीं आते। – fqxp

258

एक और सुंदर समाधान होगा:

page.should have_field('Your name', with: 'John') 

या क्रमशः

expect(page).to have_field('Your name', with: 'John') 

reference भी देखें।

नोट: अक्षम इनपुट के लिए, आपको disabled: true विकल्प जोड़ने की आवश्यकता होगी।

+15

चयनित उत्तर से काफी बेहतर! – Agent47DarkSoul

+3

मैं अभी भी चयनित उत्तर पसंद करूंगा क्योंकि त्रुटि संदेश आपको अपेक्षित और वास्तविक तार दिखाता है। यह मेरे क्षेत्र को "कुछ वापस करने" त्रुटि के लिए अनुपयुक्त "अपेक्षित फ़ील्ड" देता है। लेकिन यह निश्चित रूप से बेहतर पढ़ता है और पेज मैचर एपीआई को बेहतर तरीके से पालन करता है। चारों ओर उपरोक्त !!! – mraaroncruz

+0

यह फ़ील्ड की सामग्री को सत्यापित करने के लिए typeahead.js का उपयोग करते समय मेरे लिए काम करता था, जबकि xpath matcher नहीं था। –

1

आप विशेष रूप से एक प्लेसहोल्डर के लिए परीक्षण करना चाहते हैं, का उपयोग करें:

page.should have_field("some_field_name", placeholder: "Some Placeholder") 

या:

page.should have_field("some_field_name", with: "Some Entered Value") 
0

:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder") 

आप उपयोगकर्ता के दर्ज किए गए मान परीक्षण करना चाहते हैं मैं सोच रहा था कि कुछ अलग कैसे करें: मैं यह जांचना चाहता था कि फ़ील्ड में कुछ था मूल्य (Capybara's ability to re-test the matcher until it matches का उपयोग करते समय)। यह पता चला है कि ऐसा करने के लिए "फ़िल्टर ब्लॉक" का उपयोग करना संभव है:

expect(page).to have_field("field_name") { |field| 
    field.value.present? 
}