पेज ऑब्जेक्ट मॉडल क्या है?
पेज ऑब्जेक्ट मॉडल (पीओएम) एक डिज़ाइन पैटर्न है, जो कि परीक्षण स्वचालन में लोकप्रिय है, जो वेब यूआई तत्वों के लिए ऑब्जेक्ट रिपोजिटरी बनाता है। मॉडल का लाभ यह है कि यह कोड दोहराव को कम करता है और परीक्षण रखरखाव में सुधार करता है।
इस मॉडल के तहत, आवेदन में प्रत्येक वेब पेज के लिए, एक संबंधित पेज क्लास होना चाहिए। यह पेज क्लास उस वेब पेज के वेबलाइंस की पहचान करेगा और इसमें पेज मेथड्स भी शामिल हैं जो उन वेब पेजों पर कार्य करते हैं। इन विधियों का नाम उनके द्वारा किए जा रहे कार्य के अनुसार दिया जाना चाहिए, अर्थात, यदि कोई लोडर भुगतान गेटवे के आने की प्रतीक्षा कर रहा है, तो POM विधि का नाम waForPaymentScreenDisplay () हो सकता है।
इस ट्यूटोरियल में, आप सीखेंगे-
- पेज ऑब्जेक्ट क्यों?
- पोम के फायदे
- पोम कैसे लागू करें?
- पेज फैक्ट्री क्या है?
- पेज फैक्ट्री अवधारणा के साथ गुरु 99 टेस्टकैसे
- AjaxElementLocatorFactory
पेज ऑब्जेक्ट क्यों?
सेलेनियम वेबड्राइवर में यूआई स्वचालन शुरू करना कठिन काम नहीं है। आपको बस तत्वों को खोजने की जरूरत है, इस पर ऑपरेशन करें।
वेबसाइट में लॉगिन करने के लिए इस सरल स्क्रिप्ट पर विचार करें
जैसा कि आप देख सकते हैं, हम जो कुछ कर रहे हैं, वह उन तत्वों को खोजने और मूल्यों को भरने के लिए है।
यह एक छोटी स्क्रिप्ट है। स्क्रिप्ट का रखरखाव आसान लगता है। लेकिन समय के साथ परीक्षण सूट बढ़ेगा। जैसे-जैसे आप अपने कोड में अधिक से अधिक लाइनें जोड़ते हैं, चीजें कठिन होती जाती हैं।
स्क्रिप्ट रखरखाव के साथ मुख्य समस्या यह है कि यदि 10 विभिन्न स्क्रिप्ट एक ही पृष्ठ तत्व का उपयोग कर रहे हैं, तो उस तत्व में किसी भी परिवर्तन के साथ, आपको 10 स्क्रिप्ट बदलने की आवश्यकता है। यह समय लेने वाली और त्रुटि प्रवण है।
स्क्रिप्ट रखरखाव के लिए एक बेहतर दृष्टिकोण एक अलग वर्ग फ़ाइल बनाना है जो वेब तत्वों को ढूंढेगी, उन्हें भरेगी या उन्हें सत्यापित करेगी। उस तत्व का उपयोग करके सभी लिपियों में इस वर्ग का पुन: उपयोग किया जा सकता है। भविष्य में, यदि वेब तत्व में कोई परिवर्तन होता है, तो हमें केवल 1 क्लास फ़ाइल में परिवर्तन करने की आवश्यकता है, न कि 10 विभिन्न लिपियों की।
इस दृष्टिकोण को सेलेनियम में पेज ऑब्जेक्ट मॉडल कहा जाता है। यह कोड को अधिक पठनीय, बनाए रखने योग्य और पुन: प्रयोज्य बनाने में मदद करता है।
पोम के फायदे
- पृष्ठ ऑब्जेक्ट डिज़ाइन पैटर्न कहता है कि UI में संचालन और प्रवाह को सत्यापन से अलग किया जाना चाहिए। यह अवधारणा हमारे कोड को क्लीनर और समझने में आसान बनाती है।
- दूसरा लाभ यह है कि ऑब्जेक्ट रिपॉजिटरी परीक्षण के मामलों से स्वतंत्र है, इसलिए हम एक ही ऑब्जेक्ट रिपॉजिटरी का उपयोग विभिन्न उपकरणों के साथ एक अलग उद्देश्य के लिए कर सकते हैं। उदाहरण के लिए, हम कार्यात्मक परीक्षण के लिए TestNG / JUnit के साथ सेलेनियम में पेज ऑब्जेक्ट मॉडल को एकीकृत कर सकते हैं और साथ ही स्वीकृति परीक्षण के लिए JBehave / ककड़ी के साथ।
- POM कक्षाओं में पुन: प्रयोज्य पृष्ठ विधियों के कारण कोड कम और अनुकूलित हो जाता है।
- विधियों को अधिक यथार्थवादी नाम मिलते हैं जिन्हें आसानी से यूआई में होने वाले ऑपरेशन के साथ मैप किया जा सकता है। यानी यदि हम होम पेज पर आए बटन पर क्लिक करते हैं, तो विधि का नाम 'गेटोहोमपेज ()' जैसा होगा।
पोम कैसे लागू करें?
सरल पोम:
यह जहां के सभी वेब तत्वों पृष्ठ ऑब्जेक्ट मॉडल ढांचे बुनियादी संरचना है AUT और विधि है कि इन वेब तत्वों पर काम एक वर्ग file.A कार्य के अंदर रखा जाता है सत्यापन की तरह टेस्ट तरीकों के हिस्से के रूप अलग होना चाहिए।
पूरा उदाहरण
TestCase : गुरु 99 डेमो साइट पर जाएं।
चरण 1) गुरु 99 डेमो साइट पर जाएं | |
चरण 2) होम पेज में चेक गुरु "गुरु99 बैंक" मौजूद है | |
चरण 3) आवेदन में लॉगिन करें | |
चरण 4) सत्यापित करें कि मुख पृष्ठ में "मंगर आईडी: डेमो" के रूप में पाठ है |
यहां हम 2 पृष्ठों के साथ काम कर रहे हैं
- लोग इन वाला पन्ना
- होम पेज (एक बार लॉगिन करने के बाद दिखाया गया है)
तदनुसार, हम सेलेनियम कक्षाओं में 2 पीओएम बनाते हैं
गुरु99 लॉगिन पेज POM
पैकेज पृष्ठ;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;सार्वजनिक वर्गWebDriver ड्राइवर;User99GuruName = By.name ("uid") द्वारा;Password99Guru = By.name ("पासवर्ड") द्वारा;TitleText = By.className ("बैरन") द्वारा;लॉगिन करके = By.name ("btnLogin");जनता गुरु99 लोजिन (वेबड्राइवर ड्राइवर) {this.driver = चालक;}// टेक्स्टबॉक्स में यूजर नेम सेट करेंसार्वजनिक शून्य सेटअनुनाम (स्ट्रिंग strUserName) {Driver.findElement (user99GuruName) .sendKeys (strUserName);}// पासवर्ड टेक्स्ट बॉक्स में पासवर्ड सेट करेंसार्वजनिक शून्य सेटपासवर्ड (स्ट्रिंग स्ट्रैपहाउस) {Driver.findElement (password99Guru) .sendKeys (strPassword);}// लॉगिन बटन पर क्लिक करेंसार्वजनिक शून्य क्लिकलॉगिन () {Driver.findElement (लॉगिन) .click ();}// लॉगिन पेज का शीर्षक प्राप्त करेंसार्वजनिक स्ट्रिंग getLoginTitle () {वापसी के चालक।}/ *** आवेदन में लॉगिन करने के लिए यह पोम विधि परीक्षण मामले में उजागर की जाएगी* @ अप्राम strUserName* @ अप्राम स्ट्रैसपॉर्वर्ड* @वापसी* /public void loginToGuru99 (स्ट्रिंग strUserName, स्ट्रिंग strPasword) {// यूजर नेम भरेंthis.setUserName (strUserName);// पासवर्ड भरेंthis.setPassword (स्ट्रैपपासवर्ड);// लॉगिन बटन पर क्लिक करेंthis.clickLogin ();}}
सेलेनियम में गुरु99 होम पेज पोम
पैकेज पृष्ठ;आयात org.openqa.selenium.By;आयात org.openqa.selenium.WebDriver;सार्वजनिक वर्गWebDriver ड्राइवर;HomePageUserName = By.xpath ("// table // tr [@ class = 'शीर्ष 3']");जनता का गुरु99 होमपेज (वेबड्राइवर ड्राइवर) {this.driver = चालक;}// होम पेज से उपयोगकर्ता नाम प्राप्त करेंसार्वजनिक स्ट्रिंग getHomePageDashboardUserName () {वापसी के चालक।}}
सेलेनियम टेस्ट मामले में गुरु 99 सरल पोम
पैकेज परीक्षण;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.Assert;आयात org.testng.annotations.BeforeTest;आयात org.testng.annotations.Test;आयात पृष्ठ। Guru99HomePage;आयात पृष्ठ। Guru99Login;सार्वजनिक वर्ग Test99GuruLogin {स्ट्रिंग ड्राइवरपथ = "C: \\ geckodriver.exe";WebDriver ड्राइवर;गुरु 99 लोजिन ओब्लाजिन;गुरु९होमपेज objHomePage;@ सबसे पहलेसार्वजनिक शून्य सेटअप () {System.setProperty ("webdriver.gecko.driver", driverPath);ड्राइवर = नया फ़ायरफ़ॉक्सड्राइवर ();ड्राइवर।Driver.get ("http://demo.guru99.com/V4/");}/ *** यह परीक्षण मामला http://demo.guru99.com/V4/ पर लॉगिन करेगा* गुरु99 बैंक के रूप में लॉगिन पेज शीर्षक सत्यापित करें* आवेदन करने के लिए लॉगिन करें* डैशबोर्ड संदेश का उपयोग करके मुख पृष्ठ को सत्यापित करें* /@ टेस्ट (प्राथमिकता = 0)public void test_Home_Page_Appear_Correct () {// लॉगिन पेज ऑब्जेक्ट बनाएंobjLogin = new Guru99Login (ड्राइवर);// लॉगिन पेज शीर्षक सत्यापित करेंस्ट्रिंग लॉगिनपगीतल = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase () शामिल हैं ("गुरु99 बैंक");// आवेदन करने के लिए लॉगिन करेंobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// अगले पेज पर जाएंobjHomePage = नया गुरु99 हैमपेज (ड्राइवर);// होम पेज सत्यापित करेंAssert.assertTrue (objHomePage.getHomePageDashboardUserName ()। ToLowerCase () शामिल हैं। ("manger id: mgr123"));}
सेलेनियम में पेज फैक्टरी क्या है?
सेलेनियम में पेज फैक्टरी एक इनबिल्ट पेज ऑब्जेक्ट मॉडल फ्रेमवर्क अवधारणा है जो सेलेनियम वेबड्राइवर के लिए है लेकिन यह बहुत अनुकूलित है। इसका उपयोग पेज ऑब्जेक्ट्स के इनिशियलाइज़ेशन के लिए या पेज ऑब्जेक्ट को तुरंत इंस्टेंट करने के लिए किया जाता है। इसका उपयोग "FindElement / s" के बिना पेज क्लास तत्वों को इनिशियलाइज़ करने के लिए भी किया जाता है।
यहाँ भी, हम पेज ऑब्जेक्ट रिपोजिटरी और टेस्ट मेथड्स के पृथक्करण की अवधारणा का पालन करते हैं। इसके अतिरिक्त, सेलेनियम में पृष्ठ PageFactory की मदद से, हम WebElement खोजने के लिए एनोटेशन @FindBy का उपयोग करते हैं। हम वेब तत्वों को आरंभ करने के लिए initElements विधि का उपयोग करते हैं
@FindBy विशेषताएँ के रूप में tagName, partLinkText, नाम, linkText, id, css, className, xpath स्वीकार कर सकते हैं ।
पेज फैक्ट्री का उपयोग करते हुए ऊपर दिए गए उदाहरण को देखें
पेज फैक्ट्री के साथ गुरु99 लॉगिन पेज
पैकेज पेजफैक्टिंग;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.support.FindBy;आयात org.openqa.selenium.support.PageFactory;सार्वजनिक वर्ग/ *** सभी WebElements की पहचान @FindBy एनोटेशन द्वारा की जाती है* /WebDriver ड्राइवर;@FindBy (नाम = "uid")WebElement user99GuruName;@FindBy (नाम = "पासवर्ड")WebElement पासवर्ड99Guru;@FindBy (className = "barone")WebElement शीर्षकटैक्स;@FindBy (नाम = "btnLogin")WebElement login;जनता गुरु99 लोजिन (वेबड्राइवर ड्राइवर) {this.driver = चालक;// यह initElements विधि सभी WebElements बनाएगीPageFactory.initElements (ड्राइवर, यह);}// टेक्स्टबॉक्स में यूजर नेम सेट करेंसार्वजनिक शून्य सेटअनुनाम (स्ट्रिंग strUserName) {user99GuruName.sendKeys (strUserName);}// पासवर्ड टेक्स्ट बॉक्स में पासवर्ड सेट करेंसार्वजनिक शून्य सेटपासवर्ड (स्ट्रिंग स्ट्रैपहाउस) {password99Guru.sendKeys (strPassword);}// लॉगिन बटन पर क्लिक करेंसार्वजनिक शून्य क्लिकलॉगिन () {login.click ();}// लॉगिन पेज का शीर्षक प्राप्त करेंसार्वजनिक स्ट्रिंग getLoginTitle () {वापसी शीर्षकText.getText ();}/ *** आवेदन में लॉगिन करने के लिए यह पोम विधि परीक्षण मामले में उजागर की जाएगी* @ अप्राम strUserName* @ अप्राम स्ट्रैसपॉर्वर्ड* @वापसी* /public void loginToGuru99 (स्ट्रिंग strUserName, स्ट्रिंग strPasword) {// यूजर नेम भरेंthis.setUserName (strUserName);// पासवर्ड भरेंthis.setPassword (स्ट्रैपपासवर्ड);// लॉगिन बटन पर क्लिक करेंthis.clickLogin ();}}
पेज फैक्ट्री के साथ गुरु99 होम पेज
पैकेज पेजफैक्टिंग;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.WebElement;आयात org.openqa.selenium.support.FindBy;आयात org.openqa.selenium.support.PageFactory;सार्वजनिक वर्गWebDriver ड्राइवर;@FindBy (xpath = "// तालिका // tr [@ वर्ग = 'शीर्ष 3']")WebElement homePageUserName;जनता का गुरु99 होमपेज (वेबड्राइवर ड्राइवर) {this.driver = चालक;// यह initElements विधि सभी WebElements बनाएगीPageFactory.initElements (ड्राइवर, यह);}// होम पेज से उपयोगकर्ता नाम प्राप्त करेंसार्वजनिक स्ट्रिंग getHomePageDashboardUserName () {घर वापस जाएं}}
पेज फैक्ट्री अवधारणा के साथ गुरु 99 टेस्टकैसे
पैकेज परीक्षण;आयात java.util.concurrent.TimeUnit;आयात org.openqa.selenium.WebDriver;आयात org.openqa.selenium.firefox.FirefoxDriver;आयात org.testng.Assert;आयात org.testng.annotations.BeforeTest;आयात org.testng.annotations.Test;आयातआयात PageFactory.Guru99Login;सार्वजनिक वर्ग Test99GuruLoginWithPageFactory {स्ट्रिंग ड्राइवरपथ = "C: \\ geckodriver.exe";WebDriver ड्राइवर;गुरु 99 लोजिन ओब्लाजिन;गुरु९होमपेज objHomePage;@ सबसे पहलेसार्वजनिक शून्य सेटअप () {System.setProperty ("webdriver.gecko.driver", driverPath);ड्राइवर = नया फ़ायरफ़ॉक्सड्राइवर ();ड्राइवर।Driver.get ("http://demo.guru99.com/V4/");}/ *** यह परीक्षण http://demo.guru99.com/V4/ पर जाएं* गुरु99 बैंक के रूप में लॉगिन पेज शीर्षक सत्यापित करें* आवेदन करने के लिए लॉगिन करें* डैशबोर्ड संदेश का उपयोग करके मुख पृष्ठ को सत्यापित करें* /@ टेस्ट (प्राथमिकता = 0)public void test_Home_Page_Appear_Correct () {// लॉगिन पेज ऑब्जेक्ट बनाएंobjLogin = new Guru99Login (ड्राइवर);// लॉगिन पेज शीर्षक सत्यापित करेंस्ट्रिंग लॉगिनपगीतल = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase () शामिल हैं ("गुरु99 बैंक");// आवेदन करने के लिए लॉगिन करेंobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// अगले पेज पर जाएंobjHomePage = नया गुरु99 हैमपेज (ड्राइवर);// होम पेज सत्यापित करेंAssert.assertTrue (objHomePage.getHomePageDashboardUserName ()। ToLowerCase () शामिल हैं। ("manger id: mgr123"));}}
पूर्ण परियोजना संरचना आरेख की तरह दिखाई देगी:
AjaxElementLocatorFactory
AjaxElementLocatorFactory सेलेनियम में PageFactory की एक आलसी लोडिंग अवधारणा है। इसका उपयोग वेब तत्वों को खोजने के लिए किया जाता है, जब किसी भी ऑपरेशन में तत्वों का उपयोग किया जाता है। यह वेब पेज के लिए ऑब्जेक्ट पेज क्लास के लिए एक टाइमआउट प्रदान करता है। सेलेनियम में PageFactory पैटर्न का उपयोग करने के प्रमुख लाभों में से एक AjaxElementLocatorFactory वर्ग है।
यहां, जब किसी ऑपरेशन को किसी तत्व पर किया जाता है, तो उसकी दृश्यता की प्रतीक्षा उसी क्षण से शुरू होती है। यदि तत्व दिए गए समय अंतराल में नहीं मिला है, तो टेस्ट केस निष्पादन 'NoSuchElementException' अपवाद को फेंक देगा।
सारांश
- सेलेनियम वेबसड्राइवर में पेज ऑब्जेक्ट मॉडल एक ऑब्जेक्ट रिपोजिटरी डिज़ाइन पैटर्न है।
- सेलेनियम पेज ऑब्जेक्ट मॉडल हमारे परीक्षण कोड को बनाए रखने योग्य, पुन: प्रयोज्य बनाता है।
- पेज फैक्ट्री मॉडल फ्रेमवर्क अवधारणा में ऑब्जेक्ट फैक्ट्री बनाने के लिए पेज फैक्ट्री एक अनुकूलित तरीका है।
- AjaxElementLocatorFactory पेज फैक्ट्री में एक आलसी लोड अवधारणा है - वेब ऑब्जेक्ट्स की पहचान करने के लिए पृष्ठ ऑब्जेक्ट डिज़ाइन पैटर्न केवल जब वे किसी भी ऑपरेशन में उपयोग किए जाते हैं।
इस ट्यूटोरियल में सेलेनियम प्रोजेक्ट फाइल्स को डेमो के लिए डाउनलोड करें