नोट: चलो 'क्लिक' कॉल एंड-यूज़र क्लिक है। 'js click' जेएस के माध्यम से क्लिक होता है
जब एक नियमित वेबड्राइवर क्लिक नहीं करता है तो "जावास्क्रिप्ट के माध्यम से" काम क्यों करता है?
ऐसा होने के लिए 2 मामले हैं:
I. यदि आप PhamtomJS का उपयोग कर रहे हैं
तब यह सबसे आम ज्ञात व्यवहार है PhantomJS
। कुछ तत्व कभी-कभी क्लिक करने योग्य नहीं होते हैं, उदाहरण के लिए <div>
। ऐसा इसलिए है क्योंकि यह PhantomJS
ब्राउज़र के इंजन (जैसे प्रारंभिक HTML + CSS -> कंप्यूटिंग सीएसएस -> रेंडरिंग) के अनुकरण के लिए मूल बनाया गया था। लेकिन इसका अंत उपयोगकर्ता के तरीके (देखने, क्लिक करने, खींचने) के रूप में बातचीत करने का नहीं है। इसलिए PhamtomJS
केवल एंड-यूज़र इंटरैक्शन के साथ आंशिक रूप से समर्थित है।
क्यों जेएस क्लिक करें काम करता है? या तो क्लिक के लिए, वे सभी मतलब क्लिक हैं। यह 1 बैरल और 2 ट्रिगर वाली बंदूक की तरह है । व्यूपोर्ट से एक, जेएस से एक। चूंकि PhamtomJS
ब्राउज़र के इंजन के अनुकरण में महान, एक जेएस क्लिक को पूरी तरह से काम करना चाहिए।
द्वितीय। "क्लिक" के इवेंट हैंडलर को समय की बुरी अवधि में बांधना पड़ा।
उदाहरण के लिए, हमें ए <div>
हम उसी परिणाम के साथ समाप्त हो सकते हैं। क्लिक करने से काम नहीं चलेगा, क्योंकि WebdriverJS उस तत्व पर क्लिक करने की कोशिश कर रहा है, जब उसके पास क्लिक हैंडलर नहीं है।
क्यों जेएस क्लिक करें काम करता है? Js क्लिक ब्राउज़र में सीधे js इंजेक्ट करने जैसा है। 2 तरीकों से संभव है,
मुट्ठी devtools कंसोल के माध्यम से है (हाँ, WebdriverJS devtools 'कंसोल के साथ संवाद करता है)।
दूसरा एक <script>
टैग को सीधे HTML में इंजेक्ट किया जाता है।
प्रत्येक ब्राउज़र के लिए, व्यवहार भिन्न होगा। लेकिन परवाह किए बिना, बटन पर क्लिक करने की तुलना में ये तरीके अधिक जटिल हैं। क्लिक का उपयोग पहले से ही है (अंत-उपयोगकर्ता क्लिक), js क्लिक पिछले दरवाजे से गुजर रहा है।
और js क्लिक के लिए एक अतुल्यकालिक कार्य दिखाई देगा। यह ' ब्राउज़र एसिंक्रोनस टास्क और सीपीयू टास्क शेड्यूलिंग ' के एक थोड़े जटिल विषय से संबंधित है (इसे कुछ समय पहले पढ़ें फिर से लेख नहीं मिल सकता है)। संक्षेप में यह ज्यादातर परिणाम देगा क्योंकि js क्लिक के लिए CPU के कार्य शेड्यूलिंग के एक चक्र की प्रतीक्षा करनी होगी और यह क्लिक इवेंट के बंधन के बाद थोड़ा धीमा हो जाएगा।
(आप इस मामले को तब जान सकते हैं जब आपको तत्व कभी-कभी क्लिक करने योग्य लगे, कभी-कभी नहीं।)
जब वास्तव में ऐसा हो रहा है और इस वर्कअराउंड (यदि कोई हो) के नकारात्मक पक्ष क्या है?
=> जैसा कि ऊपर उल्लेख किया गया है, दोनों का अर्थ एक ही उद्देश्य के लिए है, लेकिन किस प्रवेश द्वार का उपयोग करने के बारे में:
- क्लिक करें: ब्राउज़र के डिफ़ॉल्ट रूप से जो प्रदान कर रहा है उसका उपयोग कर रहा है।
- जेएस क्लिक: पिछले दरवाजे से गुजर रहा है।
=> प्रदर्शन के लिए, यह कहना मुश्किल है क्योंकि यह ब्राउज़रों पर निर्भर करता है। लेकिन आम तौर पर:
- क्लिक: का अर्थ तेज़ नहीं है, बल्कि केवल सीपीयू निष्पादन कार्य की अनुसूची सूची में उच्च स्थान पर हस्ताक्षर किए हैं।
- जेएस क्लिक: का मतलब धीमी नहीं है, लेकिन केवल यह सीपीयू कार्य की अनुसूची सूची की अंतिम स्थिति में हस्ताक्षरित है।
=> डाउनसाइड्स:
- क्लिक करें: लगता है कि PhamtomJS का उपयोग करने के अलावा आपको कोई नकारात्मक पहलू नहीं है।
- जेएस क्लिक: स्वास्थ्य के लिए बहुत बुरा। आप गलती से किसी ऐसी चीज़ पर क्लिक कर सकते हैं जो वहाँ पर नहीं है। जब आप इसका उपयोग करते हैं, तो सुनिश्चित करें कि तत्व वहाँ है और देखने के लिए उपलब्ध है और अंत-उपयोगकर्ता के दृष्टिकोण के रूप में क्लिक करें।
पुनश्च यदि आप एक समाधान की तलाश कर रहे हैं।
- PhantomJS का उपयोग करना? मैं इसके बजाय क्रोम हेडलेस का उपयोग करने का सुझाव दूंगा। हां, आप उबंटू पर क्रोम हेडलेस सेट कर सकते हैं। थिंग क्रोम की तरह ही चलता है लेकिन इसमें केवल फैंटम जेएस जैसा दृश्य और कम बगिया नहीं है।
- PhamtomJS का उपयोग नहीं, लेकिन अभी भी समस्या है? मैं
browser.wait()
( अधिक जानकारी के लिए इस की जाँच करें ) के साथ ExpectedCondition of Protractor का उपयोग करने का सुझाव दूंगा
(मैं इसे छोटा करना चाहता हूं, लेकिन बुरी तरह समाप्त हो गया। सिद्धांत से जुड़ी कोई भी बात समझाने के लिए जटिल है ...)