47

मेरे पास इनपुट फ़ील्ड में स्ट्रिंग इनपुट करने के लिए निम्न सहायक विधि है और एंटर कुंजी दबाएं, लेकिन ऐसा लगता है कि एंटर कुंजी कभी दबाई नहीं जाती है। मैं इनपुट फ़ील्ड में दर्ज स्ट्रिंग को देखता हूं, लेकिन एंटर मारने पर होने वाली घटनाएं कभी नहीं हुईं।मैं कैपिबरा और क्रोमड्राइवर के साथ इनपुट फ़ील्ड में प्रवेश मारने का अनुकरण कैसे करूं?

मैंने एक वास्तविक ब्राउज़र में परीक्षण किया है कि एंटर कुंजी सही ढंग से अपेक्षित घटनाओं को सक्रिय करती है। मुझे यकीन नहीं है कि मैं क्या खो रहा हूं।

def fill_and_trigger_enter_keypress(selector, value) 
    page.execute_script %Q(
          var input = $('#{selector}'); 
          input.val('#{value}'); 
          input.trigger("keypress", [13]); 
         ) 
end 

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

मैं भी कोई लाभ नहीं हुआ निम्नलिखित की कोशिश की है:

find('#q_name').native.send_keys(:return) 
find('#q_name').native.send_keys(:enter) 

वे किसी भी त्रुटि का कारण नहीं है, लेकिन अभी भी कोई कुंजी दबाने दर्ज करें।

उत्तर

4

Capybara को send_keys प्रकार की घटना के लिए मूल समर्थन नहीं है। आप इसे करने के लिए सेलेनियम पर जाने में सक्षम हो सकते हैं, या आप इस मणि https://github.com/markgandolfo/send-keys

+0

बढ़िया, मैं उस मणि को देख लूंगा। लेकिन कैपिबरा मुद्दा नहीं होना चाहिए क्योंकि मैं सीधे सेलेनियम में jQuery भेज रहा हूं, है ना? –

6

आमतौर पर जब आप पेज.execute_script चलाते हैं, तो आपको वही परिणाम मिलते हैं जैसे आप पेज कंसोल में चल रहे थे। इसे कंसोल में मैन्युअल रूप से चलाने का प्रयास करें और देखें कि आपको अपेक्षित परिणाम मिलते हैं या नहीं। यह आमतौर पर मैं करता हूं .. ब्राउज़र कंसोल विंडो में जरूरी जेएस कोड तैयार करें और execute_script का उपयोग करते हुए इसे कैपिबरा कोड में पेस्ट करें।

+0

उस पर काम करना। जब मैं $ ('# input_selector') करता हूं तो मुझे कोई त्रुटि नहीं मिलती है। ट्रिगर ('कीप्रेस', [13]), लेकिन फिर भी कुछ भी नहीं लगता है जैसे कि मैं ब्राउज़र में प्रवेश करना चाहता हूं। –

+1

हाँ तो आपको शायद उस ईवेंट को ट्विक करना होगा जो आप ट्रिगर कर रहे हैं। पहले फोकस इवेंट ट्रिगर करने का प्रयास करें, अनुकरण करने के लिए कि आपने इसे दर्ज करने के लिए इनपुट पर क्लिक किया है, और उसके बाद कीप्रेस .. मुझे जो मिला वह यह है कि आपको आमतौर पर सही घटनाओं के साथ खेलना पड़ता है –

+1

यह एक स्वतः पूर्ण करने के लिए मैं करता हूं, उदाहरण: पेज.execute_script% क्यू {$ ('# {selector}')। वैल ('# {value}')। फोकस()। keydown()} –

67
find('#q_name').native.send_keys(:return) 

मेरे लिए काम करता है। मेरे पास मेरे क्षेत्र के लिए कोई नाम या आईडी नहीं है लेकिन प्रकार इनपुट है इसलिए मैंने

find('.myselector_name>input').native.send_keys(:return) 

कुछ ठीक तरह से काम करता है!

+0

अतिरिक्त जानकारी के रूप में, सेलिनियम कुंजी अनुकरण नहीं करता है छुपे तत्वों पर घटनाएं, जबकि यह समाधान छुपे तत्वों के साथ भी ठीक काम करता है। – RajaRaviVarma

+2

@ मिस्टरियो मैन यह समाधान कैपिबरा 2.5 के साथ काम नहीं कर रहा है।यह 'NoMethodError फेंकता है:" 5 "के लिए अपरिभाषित विधि 'send_keys': स्ट्रिंग' त्रुटि। –

1

यह काम करता है के लिए मुझे

page.execute_script("$('form.css-class/#form_id').submit()") 
+0

'$ ('form.css-class/# form_id')' मान्य नहीं है jQuery - चल रहा है यह एक त्रुटि फेंकता है। – GMA

+0

मुझे लगता है कि इसे स्लैश के बिना स्वरूपित करने की आवश्यकता है, इसलिए '$ ('form.css-class # form_id')' – foomip

0

@Page.selector.send_keys :return

यह मेरे लिए काम करता है, जहां selector अपने पेज वस्तु में तत्व तत्व :selector, '<css selector>'

11

इन दिनों (Capybara संस्करण 2.5+) है आप <enter> कुंजी को निम्न तरीके से अनुकरण कर सकते हैं:

find('.selector').set("text\n") 

\n यहां बहुत महत्वपूर्ण बात है।

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

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