2013-07-08 8 views
38

मान लें कि मेरे पास एक फॉर्म में input है (एक बटन की तरह दिखता है और एक बटन की तरह इंटरैक्ट करता है) जो कुछ डेटा उत्पन्न करता है (ठीक है, सर्वर फॉर्म पैरामीटर के आधार पर डेटा उत्पन्न करता है, लेकिन उपयोगकर्ता के लिए, बटन यह करता है :)) फॉर्म में पैरामीटर के आधार पर।सेलेनियम वेबड्राइवर सबमिट() बनाम क्लिक करें()

जब मैं click() उपयोग करते हैं, पूरी प्रक्रिया रुक जाता है (यह वास्तव में जम जाता है, कोई अपवाद या त्रुटियों)।

सेलेनियम वेबसाइट से:

// Now submit the form. WebDriver will find the form for us from the element 
element.submit(); 

तो WebDriver एक submit() विधि है। वहाँ कोई अंतर, तर्क बुद्धिमान एक बटन या submit() पर एक click() का उपयोग कर के बीच है?

उत्तर

41

submit() समारोह जीवन को आसान बनाने के लिए है। आप उस फॉर्म को सबमिट करने के लिए फ़ॉर्म टैग के अंदर किसी भी तत्व पर इसका उपयोग कर सकते हैं।

तुम भी सबमिट बटन के लिए खोज और click() उपयोग कर सकते हैं।

तो एकमात्र अंतर click() सबमिट बटन पर किया जाना है और submit() किसी भी फॉर्म तत्व पर किया जा सकता है।

यह आप पर निर्भर है।

http://docs.seleniumhq.org/docs/03_webdriver.jsp#user-input-filling-in-forms

+0

आह, इसलिए निष्पादन में कोई अंतर नहीं है। मैंने इतना सोचा है। ठंड किसी अन्य स्रोत/आईई गड़बड़ से होनी चाहिए ... वास्तव में आईई + सेलेनियम नापसंद। जवाब के लिए धन्यवाद। – CosminO

+4

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

+0

क्रोमरेड्रिवर का उपयोग करते हुए कम से कम .NET संस्करण के लिए एक महत्वपूर्ण अंतर भी है, सबमिट पृष्ठ लोड होने की प्रतीक्षा करेगा, क्लिक की गारंटी नहीं है। –

22

वहाँ क्लिक के बीच एक अंतर() है और प्रस्तुत()।

प्रस्तुत() प्रपत्र सबमिट और यूआरएल है कि "कार्रवाई" विशेषता द्वारा दिया जाता है निष्पादित करता है। यदि आपके पास फॉर्म सबमिट करने के लिए कोई जावास्क्रिप्ट-फ़ंक्शन या jquery-plugin चल रहा है उदा। AJAX के माध्यम से सबमिट करें() इसे अनदेखा कर देगा। क्लिक() के साथ जावास्क्रिप्ट-फ़ंक्शन निष्पादित किए जाएंगे।

+1

प्रतीक्षा करें। JQuery के व्यापक उपयोग के कारण लगभग हर बटन पर क्लिक करते समय अधिकांश आधुनिक यूआई फ़ायर जावास्क्रिप्ट फ़ंक्शन करता है। webdriver.submit() एक "form2url" फ़ंक्शन की तरह है। यही कारण है कि इसे किसी अन्य तत्व का उपयोग करके निकाल दिया जा सकता है, जिसमें फॉर्म के बाहर भी शामिल है क्योंकि यह कमजोर से संबंधित कुछ भी नहीं है, केवल पहले फॉर्म उदाहरण से मूल्य प्राप्त करना। यदि आप किसी ऐसे फॉर्म को आग लगाना चाहते हैं जो पहले नहीं है तो आपको पहले फॉर्म तत्व प्राप्त करना चाहिए या दूसरों को हटा देना चाहिए। – erm3nda

6

इसके अलावा, मुझे ठीक कर लें मैं गलत हूँ, लेकिन मुझे विश्वास है कि प्रस्तुत लोड करने के लिए एक नया पृष्ठ के लिए इंतजार करेंगे, जबकि तुरंत मैं submit() का एक बड़ा प्रशंसक था लेकिन अब नहीं क्रियान्वित कोड

+2

आज, मुझे सबमिट के साथ क्लिक कॉल को प्रतिस्थापित करना पड़ा क्योंकि क्लिक पेज लोड होने के लिए और इंतजार नहीं करता है, मुझे यकीन है कि क्लिक सही तरीके से काम कर रहा था। यह हाल ही में कुछ बदल दिया जाना चाहिए, लेकिन मैं इसे साबित नहीं कर सकता। यदि चीज काम कर रही है तो हमेशा सेलेनियम के साथ, इसका मतलब यह नहीं है कि वे सही तरीके से किए गए हैं। –

7

जारी रहेगा क्लिक करें।

मैं जिस वेब पेज का परीक्षण करता हूं, मैं उपयोगकर्ता नाम और पासवर्ड दर्ज करता हूं और लॉगिन पर क्लिक करता हूं। जब मैंने usernametextbox.submit() का आह्वान किया, तो पासवर्ड टेक्स्टबॉक्स साफ़ हो गया (खाली हो गया) और लॉगिन विफल रहता है।

कुछ समय के लिए मेरे सिर को तोड़ने के बाद, जब मैंने usernametextbox.submit() को प्रतिस्थापित किया और loginbutton.click() के साथ प्रतिस्थापित किया, तो यह एक जादू की तरह काम करता था।

+0

पुष्टि की। सबमिट बटन पर 'submit() 'के साथ कोई समस्या थी, लेकिन यह बटन की मान विशेषता नहीं लाएगा। एक आकर्षण की तरह काम बटन पर 'क्लिक() 'का उपयोग कर। – Manfred

+0

धन्यवाद, धन्यवाद, धन्यवाद। निश्चित नहीं है कि जमा क्यों काम नहीं कर रहा है। – ndhar

+0

यहां वही समस्या है। मेरा कोड गड़बड़ हो गया, क्योंकि अब मुझे पृष्ठ को लोड करने की प्रतीक्षा करनी है। – neves

1

न तो submit() और न ही click() पर्याप्त है। हालांकि, यह ठीक काम करता है अगर आप इसे एक कुंजी ENTER साथ पालन करें:

search_form = driver.find_element_by_id(elem_id) 
search_form.send_keys(search_string) 
search_form.click() 
from selenium.webdriver.common.keys import Keys 
search_form.send_keys(Keys.ENTER) 

मैक 10.11, अजगर 2.7.9, सेलेनियम 2.53.5 पर परीक्षण किया गया। यह समानांतर में चलता है, जिसका अर्थ है ENTER कुंजी दर्ज करने के बाद रिटर्न, पेज लोड होने की प्रतीक्षा नहीं करता है।

1

submit() विधि का उपयोग फॉर्म में मौजूद बटन पर क्लिक करने के लिए किया जा सकता है और टाइप विशेषता "सबमिट" होनी चाहिए।

click() विधि का उपयोग वेबपृष्ठ में बटन पर क्लिक करने के लिए किया जाता है।

अगर मैं गलत हूं तो मुझे सुधारें।

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