पेज ऑब्जेक्ट पैटर्न
WebdriverIO के संस्करण 5 को पेज ऑब्जेक्ट पैटर्न समर्थन को ध्यान में रखकर डिजाइन किया गया था। "तत्वों को प्रथम श्रेणी के नागरिकों के रूप में" सिद्धांत की शुरुआत करके, अब इस पैटर्न का उपयोग करके बड़े परीक्षण सूट बनाना संभव है।
पेज ऑब्जेक्ट बनाने के लिए किसी अतिरिक्त पैकेज की आवश्यकता नहीं है। यह पता चला है कि स्वच्छ, आधुनिक कक्षाएं हमें आवश्यक सभी सुविधाएं प्रदान करती हैं:
- पृष्ठ वस्तुओं के बीच वंशानुक्रम
- तत्वों का आलसी लोडिंग
- तरीकों और कार्यों का कैप्सूलीकरण
पृष्ठ वस्तुओं का उपयोग करने का लक्ष्य किसी भी पृष्ठ की जानकारी को वास्तविक परीक्षणों से अलग करना है। आदर्श रूप से, आपको सभी चयनकर्ताओं या विशिष्ट निर्देशों को पृष्ठ ऑब्जेक्ट में संग्रहीत करना चाहिए जो किसी विशेष पृष्ठ के लिए अद्वितीय हैं, ताकि आप अपने पृष्ठ को पूरी तरह से फिर से डिज़ाइन करने के बाद भी अपना परीक्षण चला सकें।
पेज ऑब्जेक्ट बनाना
सबसे पहले, हमें एक मुख्य पेज ऑब्जेक्ट चाहिए जिसे हम Page.js
कहते हैं। इसमें सामान्य चयनकर्ता या विधियाँ होंगी जो सभी पृष्ठ वस्तुओं से प्राप्त होंगी।
// Page.js
export default class Page {
constructor() {
this.title = 'My Page'
}
async open (path) {
await browser.url(path)
}
}
हम हमेशा पृष्ठ ऑब्जेक्ट का एक उदाहरण export
करेंगे, और उस उदाहरण को परीक्षण में कभी नहीं बनाएंगे। चूँकि हम एंड-टू-एंड टेस्ट लिख रहे हैं, हम हमेशा पेज को एक स्टेटलेस कंस्ट्रक्शन—के रूप में मानते हैं जैसे कि प्रत्येक HTTP रिक्वेस्ट एक स्टेटलेस कंस्ट्रक्शन है।
ज़रूर, ब्राउज़र सत्र की जानकारी ले सकता है और इसलिए अलग-अलग सत्रों के आधार पर अलग-अलग पृष्ठ प्रदर्शित कर सकता है, लेकिन यह पृष्ठ ऑब्जेक्ट के भीतर प्रदर्शित नहीं होना चाहिए। इस प्रकार के राज्य परिवर्तन आपके वास्तविक परीक्षणों में रहने चाहिए।
आइए पहले पन्ने का परीक्षण शुरू करें। डेमो उद्देश्यों के लिए, हम गिनी पिग के रूप में एलिमेंटल सेलेनियम द्वारा इंटरनेट वेबसाइट का उपयोग करते हैं। आइए लॉगिन पेजके लिए पेज ऑब्जेक्ट उदाहरण बनाने का प्रयास करें।
Get
अपने चयनकर्ताओं को प्राप्त करें
पहला कदम उन सभी महत्वपूर्ण चयनकर्ताओं को लिखना है जो हमारे login.page
ऑब्जेक्ट में गेट्टर फ़ंक्शंस के रूप में आवश्यक हैं:
// login.page.js
import Page from './page'
class LoginPage extends Page {
get username () { return $('#username') }
get password () { return $('#password') }
get submitBtn () { return $('form button[type="submit"]') }
get flash () { return $('#flash') }
get headerLinks () { return $$('#header a') }
async open () {
await super.open('login')
}
async submit () {
await this.submitBtn.click()
}
}
export default new LoginPage()
गेट्टर फ़ंक्शंस में चयनकर्ताओं को परिभाषित करना थोड़ा अजीब लग सकता है, लेकिन यह वास्तव में उपयोगी है। _जब आप संपत्ति का प्रयोग करते हैं _इन कार्यों का मूल्यांकन किया जाता है, जब आप ऑब्जेक्ट उत्पन्न नहीं करते हैं। इसके साथ आप उस पर कार्रवाई करने से पहले हमेशा तत्व का अनुरोध करते हैं।