कैपिबारा में चेकबॉक्स की जांच कैसे करें?


126

मैं Rspec और Capybara का उपयोग कर रहा हूं।

मैं जाँच करने के लिए एक कदम कैसे लिख सकता हूँ checkbox? मैंने checkमूल्य से कोशिश की है, लेकिन यह मेरी नहीं मिल रही है checkbox। मुझे यकीन नहीं है कि मुझे क्या करना है, क्योंकि मेरे पास वास्तव में विभिन्न मूल्यों के साथ एक ही आईडी है

यहाँ कोड है:

 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID">
 <input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID">

6
आपके इनपुट में एक ही आईडी नहीं होनी चाहिए - उनके पास एक ही नाम होना चाहिए, लेकिन अलग-अलग आईडी।
सैमस्टेफेंस

जवाबों:


156

मैंने पाया कि निम्नलिखित मेरे लिए काम कर रहा है:

# Check
find(:css, "#cityID[value='62']").set(true)

# Uncheck
find(:css, "#cityID[value='62']").set(false)

1
सुन के अच्छा लगा! शायद आप इस उत्तर को 'स्वीकृत' के रूप में चिन्हित करेंगे और शायद इसे आगे बढ़ाएँगे ... :)
जॉन एम

@Jon MI के पास खाली ब्रैकेट के साथ कुछ विषम आईडी हैं ताकि चेक उदाहरण के लिए ... find(:css, "#cityID[value='62']").set(true)काम find(:css, "#cityID[][value='62']").set(true)करेगा लेकिन पाया नहीं जाएगा और विफल हो जाएगा। मैं एक खाली ब्रैकेट आईडी के साथ एक ही फ़ंक्शन कैसे चला सकता हूं?
टैंगिबलड्रीम

1
@TangibleDream को स्पष्ट करने के लिए - क्या आप कह रहे हैं कि चेकबॉक्स में '[]' की आईडी है?
जॉन एम

1
मुझे इस काम को सीएसएस चयनकर्ता के साथ करने का कोई तरीका नहीं मिला! वर्गाकार कोष्ठक से बचने का कोई न कोई रास्ता अवश्य होना चाहिए, लेकिन मुझे नहीं मिला। मुझे एक XPath खोजक का सहारा लेना पड़ा:find(:xpath, ".//input[@id='Extrapainful[]'][@value='12345']").set(true)
जॉन एम

3
क्या मैं इस उत्तर को नीचे चिह्नित कर सकता हूं ... मुझे पता है कि यह काम करता है, लेकिन इसका उत्तर सहज रूप से उपलब्ध उत्तर का हिस्सा नहीं होने का जवाब देने के लिए सहज है: चेक ('नाम, आईडी या पाठ यहां') (नीचे उत्तर देखें)
कोड Novitiate

137

बेहतर है कि एक ही आईडी के साथ कई तत्वों का निर्माण न करें , ताकि (और न केवल उस के लिए) आप आसानी से चेक / चेक बॉक्स को सुरुचिपूर्ण के साथ अनचेक कर सकें

check 'cityID'
uncheck 'cityID'

यदि कोई एक ही आईडी के साथ कई तत्वों से बच नहीं सकता है और फिर भी कुछ निश्चित मूल्य के साथ चेकबॉक्स की जांच करने की आवश्यकता है , तो वह ऐसा कर सकता है

find(:css, "#cityID[value='62']").set(true)
find(:css, "#cityID[value='62']").set(false)

कैपिबारा इनपुट जोड़तोड़ के बारे में अधिक जानकारी यहां पाई जा सकती है


2
यह एक ही आईडी के साथ कई तत्वों को नहीं बनाने के लिए बेहतर है क्योंकि यह वैध HTML नहीं है। अगर रेल का उपयोग हेल्पर्स को ठीक से करने के लिए एक मुद्दा नहीं होना चाहिए।
इहाजतेहोडेज़

1
मैं यह जोड़ना चाहूंगा कि चेकबॉक्स / अनचेक केवल निम्नलिखित मानों को स्वीकार करता है: आईडी, नाम या संबंधित लेबल तत्व। यहाँ आप इसके बारे में अधिक पढ़ सकते हैं।
नेशा ज़ोरिक

58

कैपिबारा टेस्ट चलाते समय, आपको pageऑब्जेक्ट मिला । इसका उपयोग आप किसी भी चेकबॉक्स को चेक / अनचेक करने के लिए कर सकते हैं। जैसा कि @buruzaemon ने पहले ही उल्लेख किया है:

नाम, आईडी या लेबल पाठ द्वारा चेकबॉक्स खोजने और जांचने के लिए।

तो मान लें कि आपको अपने HTML में एक चेकबॉक्स मिला है जैसे:

<label>  
  <input type="checkbox" value="myvalue" name="myname" id="myid">
  MyLabel
</label>

आप इसके साथ जाँच कर सकते हैं:

page.check('myid')
page.check('MyLabel')
page.check('myname')

अनचेक वही है जो केवल उपयोग page.uncheckविधि है।


1
ठोस उत्तर, सीएसएस चयनकर्ताओं का उपयोग करके स्वीकृत उत्तर की तुलना में क्लीनर लगता है (भले ही वह जांच विधि कवर के नीचे हो)
agmin

1
हां, यह सबसे अच्छा जवाब है। यह क्लीनर है और यह उपयोगकर्ता की कार्रवाई की बारीकी से नकल करता है। यह अतिरिक्त आईडी के साथ फॉर्म को प्रदूषित नहीं करता है और यह परीक्षणों को पढ़ने में आसान बनाता है।
बी सेवन

मैं मानता हूं कि यह क्लीनर है। दिलचस्प बात यह है कि, स्वीकृत जवाब इस बात से बहुत अलग नहीं है कि checkकैपिबारा में यह विधि कैसे लागू की जाती है। def check(locator, options={}) find(:checkbox, locator, options).set(true) end
बिगटुनाकन

धन्यवाद, और डॉक्स के अनुसार यही उत्तर है: rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/… "चेक बॉक्स ढूंढें और इसे चिह्नित के रूप में चिह्नित करें। चेक बॉक्स को नाम के माध्यम से पाया जा सकता है। आईडी या लेबल टेक्स्ट। "
माइक वल्लनो

26

मुझे लगता है कि आपको सबसे पहले अपने फॉर्म एलिमेंट्स को यूनीक देना होगाid

लेकिन Capybara और चेकबॉक्स के संबंध में, Capybara :: Node :: क्रियाएँ # चेक आवृत्ति विधि आपको नाम, आईडी, या लेबल पाठ द्वारा चेकबॉक्स खोजने और जांचने की अनुमति देगा।


10

यदि बॉक्स पाठ से जुड़ा हुआ है, उदाहरण के लिए 'विकल्प 3', तो जैसा कि capybara 3.0.3आप कर सकते हैं

check 'Option 3'

1
यह प्रतिक्रिया शीर्ष पर होनी चाहिए, न कि 8 साल पुराना सिंटैक्स।
sloneorzeszki

वास्तव में लेखक द्वारा वर्णित परिदृश्य के लिए, @samuel से उत्तर सही है
VP।

6

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं खुद इसके माध्यम से काम कर रहा हूं, और उपरोक्त सभी की कोशिश कर रहा हूं, यह आखिरकार इसके लिए क्या है:

find("input[type='checkbox'][value='#{cityID.id}']").set(true)

आशा है कि यह किसी के लिए उपयोगी है। मैं Capybara 2.4.4 का उपयोग कर रहा हूं।


4

एक पुराना विषय लेकिन दूसरा उपाय है:

check('Option 3', allow_label_click: true)


1

यदि आप इसे खोजने में कुछ समस्याएँ हैं, तो इसके बजाय: xpath: css का उपयोग कर सकते हैं।

खोजें (: xpath, '//* @@id="example"atalog').set(true)

Chrome (और निश्चित रूप से अन्य ब्राउज़र) पर, आप "तत्व का निरीक्षण कर सकते हैं" और फिर जिस तत्व में आप रुचि रखते हैं उस पर राइट क्लिक करके 'xpath' की प्रतिलिपि बनाएँ, यदि आपको नहीं पता कि xpath क्या था, तो अब आप करते हैं।


1

आप यह भी देख सकते हैं कि इस उदाहरण के साथ सभी चेकबॉक्स चेक नहीं किए गए हैं।

सभी ('इनपुट [टाइप = चेकबॉक्स]')। प्रत्येक करें | चेकबॉक्स | checkbox.should_not be_checked अंत


1

.सेट (सच) मेरे लिए काम नहीं करता था इसलिए मुझे कॉल करना पड़ा। क्लिक करें:

find(...).click


(1) मुझे नहीं लगता कि यह clickअपने आप में एक वैध कैपिबारा कमांड है (या कम से कम यदि यह है, तो यह डॉक्स पर नहीं लगता है), और (2) यदि यह था, तो यह संभवतः चेकबॉक्स को चालू करेगा, सुनिश्चित करें कि यह चालू या बंद नहीं था
NotAnAmbiTurner

1

कस्टम चेकबॉक्स के साथ कुछ समस्याएं थीं जो लेबल तत्व के पीछे छिपी हुई हैं। की जरूरत है allow_label_click: true

इस ब्लॉग पोस्ट के संदर्भ में ,

check 'checkbox[name]', allow_label_click: true

धन्यवाद! यह पूरी तरह से Boostrap 4 कस्टम चेकबॉक्स फ़ील्ड के साथ काम करता है। इसके अलावा, यदि आपको इसे अनचेक करने की आवश्यकता है, तो आप: 'चेकबॉक्स [नाम]' को अनचेक करें, allow_label_click: true
pastullo

0
check find(".whenever input")[:id]

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.