सर्वोत्तम अभ्यास
इस गाइड का उद्देश्य हमारे सर्वोत्तम अभ्यासों को साझा करना है जो आपको प्रदर्शनकारी और लचीले टेस्ट लिखने में मदद करते हैं।
लचीले सेलेक्टर्स का उपयोग करें
DOM में परिवर्तनों के प्रति लचीले सेलेक्टर्स का उपयोग करके, आपके कम या यहां तक कि कोई टेस्ट फेल नहीं होंगे जब उदाहरण के लिए किसी एलीमेंट से क्लास हटा दी जाती है।
क्लासेस को कई एलीमेंट्स पर लागू किया जा सकता है और यदि संभव हो तो इनसे बचना चाहिए, जब तक कि आप जानबूझकर उस क्लास के सभी एलीमेंट्स को प्राप्त करना चाहते हों।
// 👎
await $('.button')
ये सभी सेलेक्टर्स एक एकल एलीमेंट लौटाने चाहिए।
// 👍
await $('aria/Submit')
await $('[test-id="submit-button"]')
await $('#submit-button')
नोट: WebdriverIO द्वारा समर्थित सभी संभावित सेलेक्टर्स के बारे में जानने के लिए, हमारे सेलेक्टर्स पेज को देखें।
एलीमेंट क्वेरीज़ की संख्या सीमित करें
हर बार जब आप $ या $$ कमांड का उपयोग करते हैं (इसमें उन्हें चेन करना भी शामिल है), WebdriverIO DOM में एलीमेंट को ढूंढने का प्रयास करता है। ये क्वेरीज़ महंगी हैं इसलिए आपको उन्हें जितना संभव हो उतना सीमित करने का प्रयास करना चाहिए।
तीन एलीमेंट्स को क्वेरी करता है।
// 👎
await $('table').$('tr').$('td')
केवल एक एलीमेंट को क्वेरी करता है।
// 👍
await $('table tr td')
चेनिंग का उपयोग करने का एकमात्र समय तब होता है जब आप विभिन्न सेलेक्टर रणनीतियों को जोड़ना चाहते हैं। इस उदाहरण में, हम डीप सेलेक्टर्स का उपयोग करते हैं, जो एक एलीमेंट के शैडो DOM के अंदर जाने की रणनीति है।
// 👍
await $('custom-datepicker').$('#calendar').$('aria/Select')
सूची से एक एलीमेंट लेने के बजाय एक एलीमेंट को ढूंढना पसंद करें
ऐसा करना हमेशा संभव नहीं होता है, लेकिन :nth-child जैसे CSS स्यूडो-क्लासेस का उपयोग करके आप एलीमेंट्स को उनके माता-पिता की चाइल्ड लिस्ट में उनके इंडेक्स के आधार पर मैच कर सकते हैं।
सभी टेबल पंक्तियों को क्वेरी करता है।
// 👎
await $$('table tr')[15]
एक एकल टेबल पंक्ति को क्वेरी करता है।
// 👍
await $('table tr:nth-child(15)')
बिल्ट-इन अस्सर्शन्स का उपयोग करें
मैन्युअल अस्सर्शन्स का उपयोग न करें जो स्वचालित रूप से परिणामों के मिलान के लिए प्रतीक्षा नहीं करते क्योंकि इससे अस्थिर टेस्ट होंगे।
// 👎
expect(await button.isDisplayed()).toBe(true)
बिल्ट-इन अस्सर्शन्स का उपयोग करके WebdriverIO वास्तविक परिणाम के अपेक्षित परिणाम से मेल खाने के लिए स्वचालित रूप से प्रतीक्षा करेगा, जिससे लचीले टेस्ट प्राप्त होंगे। यह अस्सर्शन को स्वचालित रूप से फिर से प्रयास करके हासिल किया जाता है जब तक कि यह पास न हो जाए या टाइम आउट न हो जाए।
// 👍
await expect(button).toBeDisplayed()
लेज़ी लोडिंग और प्रॉमिस चेनिंग
WebdriverIO के पास क्लीन कोड लिखने के मामले में कुछ तकनीकें हैं क्योंकि यह एलीमेंट को लेज़ी लोड कर सकता है जो आपको अपने प्रॉमिसेस को चेन करने और await की मात्रा को कम करने की अनुमति देता है। यह आपको एलीमेंट के बजाय ChainablePromiseElement के रूप में एलीमेंट पास करने और पेज ऑब्जेक्ट्स के साथ आसान उपयोग के लिए भी अनुमति देता है।
तो आपको await का उपयोग कब करना चाहिए?
आपको हमेशा await का उपयोग करना चाहिए, $ और $$ कमांड को छोड़कर।
// 👎
const div = await $('div')
const button = await div.$('button')
await button.click()
// or
await (await (await $('div')).$('button')).click()
// 👍
const button = $('div').$('button')
await button.click()
// or
await $('div').$('button').click()