सेलेनियम के साथ एक्सटीजेएस का परीक्षण करने में सबसे बड़ी बाधा यह है कि एक्सटीजेएस मानक एचटीएमएल तत्वों को प्रस्तुत नहीं करता है और सेलेनियम आईडीई भोलेपन से (और सही तरीके से) उन तत्वों पर लक्षित कमांड उत्पन्न करेगा जो केवल सजावट के रूप में कार्य करते हैं - शानदार तत्व जो पूरे डेस्कटॉप के साथ एक्सट्रेस की मदद करते हैं- देखो और महसूस। यहां कुछ टिप्स और ट्रिक्स हैं, जिन्हें मैंने एक्सटजेएस ऐप के खिलाफ स्वचालित सेलेनियम टेस्ट लिखते समय इकट्ठा किया है।
सामान्य टिप्स
तत्वों का पता लगाना
फ़ायरफ़ॉक्स पर सेलेनियम आईडीई के साथ उपयोगकर्ता क्रियाओं को रिकॉर्ड करके सेलेनियम परीक्षण के मामले उत्पन्न करते समय, सेलेनियम HTML तत्वों के आईडी पर रिकॉर्ड किए गए कार्यों को आधार बनाएगा। हालांकि, अधिकांश क्लिक करने योग्य तत्वों के लिए, एक्सटीजेएस "एक्स-जीन-345" जैसी उत्पन्न आईडी का उपयोग करता है, जो एक ही पृष्ठ पर बाद की यात्रा पर बदलने की संभावना है, भले ही कोई कोड परिवर्तन नहीं किया गया हो। परीक्षण के लिए उपयोगकर्ता की कार्रवाइयों को रिकॉर्ड करने के बाद, ऐसे सभी कार्यों से गुजरने के लिए मैन्युअल प्रयास करने की आवश्यकता होती है जो उत्पन्न आईडी पर निर्भर करते हैं और उन्हें प्रतिस्थापित करने के लिए होते हैं। दो प्रकार के प्रतिस्थापन किए जा सकते हैं:
एक सीएसएस या XPath लोकेटर के साथ एक आईडी लोकेटर की जगह
CSS लोकेटर "css =" से शुरू होते हैं और XPath लोकेटर "//" ("xpath =" उपसर्ग वैकल्पिक है) से शुरू होते हैं। CSS लोकेटर कम क्रिया हैं और पढ़ने में आसान होते हैं और इन्हें XPath लोकेटर पर पसंद किया जाना चाहिए। हालांकि, ऐसे मामले हो सकते हैं जहां XPath लोकेटर का उपयोग करने की आवश्यकता होती है क्योंकि एक CSS लोकेटर बस इसे काट नहीं सकता है।
जावास्क्रिप्ट निष्पादित करना
एक्सटजेएस द्वारा किए गए जटिल रेंडरिंग के कारण कुछ तत्वों को सरल माउस / कीबोर्ड इंटरैक्शन से अधिक की आवश्यकता होती है। उदाहरण के लिए, एक Ext.form.CombBox वास्तव में एक <select>
तत्व नहीं है, लेकिन एक डिटैच्ड ड्रॉप-डाउन सूची वाला एक टेक्स्ट इनपुट है जो दस्तावेज़ के पेड़ के नीचे कहीं है। कॉम्बो बॉक्स चयन को ठीक से अनुकरण करने के लिए, पहले ड्रॉप-डाउन तीर पर एक क्लिक और फिर दिखाई देने वाली सूची पर क्लिक करना संभव है। हालांकि, सीएसएस या XPath लोकेटर के माध्यम से इन तत्वों का पता लगाना बोझिल हो सकता है। एक विकल्प स्वयं कोमोबॉक्स घटक का पता लगाना और चयन का अनुकरण करने के लिए उस पर कॉल करने के तरीके हैं:
var combo = Ext.getCmp('genderComboBox'); // returns the ComboBox components
combo.setValue('female'); // set the value
combo.fireEvent('select'); // because setValue() doesn't trigger the event
सेलेनियम में runScript
कमांड का उपयोग उपरोक्त ऑपरेशन को और अधिक संक्षिप्त रूप में करने के लिए किया जा सकता है:
with (Ext.getCmp('genderComboBox')) { setValue('female'); fireEvent('select'); }
AJAX और धीरे प्रतिपादन के साथ परछती
सेलेनियम में "* एंडविट" है जो सभी कमांड के लिए पेज लोड होने की प्रतीक्षा कर रहा है, जब उपयोगकर्ता कार्रवाई पेज ट्रांज़िशन या पुनः लोड करता है। हालाँकि, AJAX के वास्तविक पृष्ठ लोड शामिल नहीं होने के कारण, इन आदेशों को सिंक्रनाइज़ेशन के लिए उपयोग नहीं किया जा सकता है। समाधान एक AJAX प्रगति संकेतक की उपस्थिति / अनुपस्थिति या ग्रिड में पंक्तियों की उपस्थिति, अतिरिक्त घटकों, लिंक आदि जैसे दृश्य सुराग का उपयोग करना है। उदाहरण के लिए:
Command: waitForElementNotPresent
Target: css=div:contains('Loading...')
कभी-कभी एक तत्व एक निश्चित समय के बाद ही दिखाई देगा, यह इस बात पर निर्भर करता है कि उपयोगकर्ता परिवर्तन के परिणामस्वरूप घटकों को दृश्य परिवर्तन में कितनी तेजी से बढ़ाता है। pause
आदेश के साथ मध्यस्थता विलंब का उपयोग करने के बजाय , आदर्श पद्धति तब तक इंतजार करना है जब तक कि ब्याज का तत्व हमारी समझ में नहीं आता है। उदाहरण के लिए, किसी आइटम पर क्लिक करने के लिए उसके प्रकट होने का इंतजार करने के बाद:
Command: waitForElementPresent
Target: css=span:contains('Do the funky thing')
Command: click
Target: css=span:contains('Do the funky thing')
समय-समय पर मतभेदों के कारण मनमाने ठहराव पर भरोसा करना एक अच्छा विचार नहीं है, जिसके परिणामस्वरूप विभिन्न ब्राउज़रों में या विभिन्न मशीनों पर परीक्षण चलाने से परीक्षण के मामले भड़क जाएंगे।
गैर-क्लिक करने योग्य आइटम
कुछ तत्वों को click
कमांड द्वारा ट्रिगर नहीं किया जा सकता है । यह इसलिए है क्योंकि इवेंट श्रोता वास्तव में कंटेनर पर है, अपने बच्चे के तत्वों पर माउस की घटनाओं को देख रहा है, जो अंततः माता-पिता को बुलबुला कर देता है। टैब नियंत्रण एक उदाहरण है। टैब पर क्लिक करने के लिए, आपको mouseDown
टैब लेबल पर एक घटना का अनुकरण करना होगा :
Command: mouseDownAt
Target: css=.x-tab-strip-text:contains('Options')
Value: 0,0
क्षेत्र मान्यता
प्रपत्र फ़ील्ड (एक्सटफॉर्म। * घटक) जो सत्यापन के लिए नियमित अभिव्यक्ति या vtypes जुड़े हुए हैं, एक निश्चित देरी के साथ सत्यापन को गति देगा ( validationDelay
उपयोगकर्ता द्वारा डिफ़ॉल्ट रूप से फ़ील्ड में प्रवेश करने पर तुरंत या पाठ समाप्त होने पर संपत्ति को डिफ़ॉल्ट रूप से 250ms पर सेट किया जाता है)। फोकस - या ब्लर्स ( validateOnDelay
संपत्ति देखें )। फ़ील्ड के अंदर कुछ पाठ दर्ज करने के लिए सेलेनियम आदेश जारी करने के बाद फ़ील्ड सत्यापन को ट्रिगर करने के लिए, आपको निम्नलिखित में से कोई एक कार्य करना होगा:
ट्रिगरिंग विलंबित मान्यता
जब फ़ील्ड कीप इवेंट प्राप्त करता है, तो एक्सटीजेएस सत्यापन विलंब टाइमर बंद कर देता है। इस टाइमर को ट्रिगर करने के लिए, बस एक डमी कीप इवेंट जारी करें (इससे कोई फर्क नहीं पड़ता कि आप कौन सी कुंजी का उपयोग करते हैं जो एक्सटीजेएस इसे अनदेखा करता है), इसके बाद एक छोटा विराम जो सत्यापन से अधिक लंबा हो:
Command: keyUp
Target: someTextArea
Value: x
Command: pause
Target: 500
ट्रिगरिंग मान्य सत्यापन
आप तत्काल सत्यापन को ट्रिगर करने के लिए क्षेत्र में एक धब्बा घटना को इंजेक्ट कर सकते हैं:
Command: runScript
Target: someComponent.nameTextField.fireEvent("blur")
सत्यापन परिणामों के लिए जाँच
सत्यापन के बाद, आप त्रुटि क्षेत्र की उपस्थिति या अनुपस्थिति की जांच कर सकते हैं:
Command: verifyElementNotPresent
Target: //*[@id="nameTextField"]/../*[@class="x-form-invalid-msg" and not(contains(@style, "display: none"))]
Command: verifyElementPresent
Target: //*[@id="nameTextField"]/../*[@class="x-form-invalid-msg" and not(contains(@style, "display: none"))]
ध्यान दें कि "प्रदर्शन: कोई नहीं" चेक आवश्यक है क्योंकि एक बार एक त्रुटि क्षेत्र दिखाया गया है और फिर इसे छुपाने की आवश्यकता है, तो एक्सटीजेएस केवल DOM ट्री से इसे पूरी तरह से हटाने के बजाय त्रुटि क्षेत्र को छिपाएगा।
तत्व-विशिष्ट युक्तियाँ
एक Ext.form.Button पर क्लिक करना
विकल्प 1
आदेश: लक्ष्य पर क्लिक करें: css = बटन: इसमें ('सहेजें')
इसके कैप्शन द्वारा बटन का चयन करता है
विकल्प 2
कमांड: लक्ष्य पर क्लिक करें: css = # सेव-ऑप्शन बटन
बटन को उसकी आईडी से चुनता है
एक Ext.form.ComboBox से एक मान का चयन करना
Command: runScript
Target: with (Ext.getCmp('genderComboBox')) { setValue('female'); fireEvent('select'); }
पहले मान सेट करता है और फिर पर्यवेक्षकों के मामले में चयनित घटना को स्पष्ट रूप से आग लगाता है।