पेज ऑब्जेक्ट मॉडल और फैक्ट्री में Selenium
⚡ स्मार्ट सारांश
पेज ऑब्जेक्ट मॉडल और पेज फ़ैक्टरी Selenium मज़बूत, रखरखाव योग्य परीक्षण स्वचालन ढाँचे के निर्माण के लिए एक संरचित डिज़ाइन पैटर्न परिभाषित करें। यह पृष्ठ-विशिष्ट क्लासेस बनाने पर ज़ोर देता है जो WebElements और उनके व्यवहारों को समाहित करते हैं, जिससे दोहराव कम होता है और उनकी पठनीयता और मापनीयता में सुधार होता है। Selenium परीक्षण स्क्रिप्ट.

पेज ऑब्जेक्ट मॉडल क्या है? इसके प्रमुख घटक क्या हैं?
पेज ऑब्जेक्ट मॉडल (POM) एक डिज़ाइन पैटर्न है, जिसका व्यापक रूप से परीक्षण स्वचालन में उपयोग किया जाता है, जो वेब UI तत्वों के लिए एक ऑब्जेक्ट रिपॉजिटरी बनाता है। इस मॉडल का लाभ यह है कि यह कोड दोहराव को कम करता है और परीक्षण रखरखाव में सुधार करता है।
इस मॉडल के अंतर्गत, एप्लिकेशन में प्रत्येक वेब पेज के लिए एक संगत पेज क्लास होनी चाहिए। यह पेज क्लास उस वेब पेज के वेबएलिमेंट्स की पहचान करेगी और इसमें उन वेबएलिमेंट्स पर ऑपरेशन करने वाले पेज मेथड्स भी शामिल होंगे। इन मेथड्स के नाम उनके द्वारा किए जा रहे कार्य के अनुसार दिए जाने चाहिए, अर्थात, यदि कोई लोडर पेमेंट गेटवे के प्रकट होने की प्रतीक्षा कर रहा है, तो POM मेथड का नाम waitForPaymentScreenDisplay() हो सकता है।
पेज ऑब्जेक्ट मॉडल के प्रमुख घटक
- पृष्ठ वर्ग: प्रत्येक वेब पेज को एक अलग वर्ग के रूप में प्रस्तुत करें।
- लोकेटर: आईडी, XPaths, या CSS चयनकर्ताओं का उपयोग करके वेब तत्वों की पहचान करें।
- तरीके: .page तत्वों पर की गई क्रियाएं या संचालन शामिल करें.
- पुनर्प्रयोग: Promoपरीक्षणों में कोड का पुनः उपयोग और आसान रखरखाव।
- चिंताओ का विभाजन: बेहतर संगठन के लिए पृष्ठ संरचना को परीक्षण तर्क से स्वतंत्र रखता है।
पेज ऑब्जेक्ट मॉडल क्यों?
UI स्वचालन प्रारंभ करना Selenium वेबड्राइवर यह कोई मुश्किल काम नहीं है। आपको बस एलिमेंट्स ढूँढ़ने और उन पर ऑपरेशन करने की ज़रूरत है।
किसी वेबसाइट पर लॉग इन करने के लिए इस सरल स्क्रिप्ट पर विचार करें।
जैसा कि आप देख सकते हैं, हम केवल तत्वों को ढूंढ रहे हैं और उन तत्वों के लिए मान भर रहे हैं।
यह एक समय लेने वाली और त्रुटि-प्रवण स्क्रिप्ट है। शुरुआत में यह आसान लगता है, लेकिन जैसे-जैसे टेस्ट सूट का विस्तार होता है, तत्वों में बदलाव को प्रबंधित करना मुश्किल होता जाता है। लेकिन समय के साथ, टेस्ट सूट बढ़ता जाएगा। जैसे-जैसे आप अपने कोड में और ज़्यादा लाइनें जोड़ते जाएँगे, चीज़ें और मुश्किल होती जाएँगी।
स्क्रिप्ट रखरखाव के साथ मुख्य समस्या यह है कि यदि 10 अलग-अलग स्क्रिप्ट एक ही पेज एलिमेंट का उपयोग कर रही हैं, तो उस एलिमेंट में किसी भी बदलाव के साथ, आपको सभी 10 स्क्रिप्ट को बदलना होगा। यह समय लेने वाला और त्रुटिपूर्ण है।
स्क्रिप्ट रखरखाव का एक बेहतर तरीका एक अलग क्लास फ़ाइल बनाना है जो वेब एलिमेंट्स को ढूँढ़े, उन्हें भर सके या उन्हें सत्यापित कर सके। इस क्लास का फिर से इस्तेमाल एक ही एलिमेंट के साथ इंटरैक्ट करने वाली कई टेस्ट स्क्रिप्ट्स में किया जा सकता है। भविष्य में, अगर वेब एलिमेंट में कोई बदलाव होता है, तो हमें सिर्फ़ एक क्लास फ़ाइल में बदलाव करना होगा, न कि 10 अलग-अलग स्क्रिप्ट्स में।
इस दृष्टिकोण को पेज ऑब्जेक्ट मॉडल कहा जाता है Seleniumयह कोड को अधिक पठनीय, रखरखाव योग्य और पुन: प्रयोज्य बनाने में मदद करता है।
👉 निःशुल्क लाइव के लिए नामांकन करें Selenium परियोजना
पीओएम के लाभ
- पेज ऑब्जेक्ट डिज़ाइन पैटर्न कहता है कि UI में संचालन और प्रवाह को सत्यापन से अलग किया जाना चाहिए। यह अवधारणा हमारे कोड को साफ़ और समझने में आसान बनाती है।
- दूसरा लाभ यह है कि ऑब्जेक्ट रिपॉजिटरी परीक्षण मामलों से स्वतंत्र होती है, इसलिए हम एक ही ऑब्जेक्ट रिपॉजिटरी का उपयोग विभिन्न उपकरणों के साथ विभिन्न उद्देश्यों के लिए कर सकते हैं। उदाहरण के लिए, हम पेज ऑब्जेक्ट मॉडल को इसमें एकीकृत कर सकते हैं। Selenium साथ में TestNG/JUnit कार्यात्मक के लिए परीक्षण और साथ ही JBehave/Cucumber स्वीकृति परीक्षण के लिए।
- कोड कम और अनुकूलित हो जाता है क्योंकि यह POM क्लासों में पृष्ठ विधियों का पुनः उपयोग करता है।
- विधियों को अधिक यथार्थवादी नाम मिलते हैं जिन्हें आसानी से UI में होने वाले ऑपरेशन के साथ मैप किया जा सकता है। यानी यदि बटन पर क्लिक करने के बाद हम होम पेज पर पहुंचते हैं, तो विधि का नाम 'gotoHomePage()' जैसा होगा।
POM को कैसे क्रियान्वित करें? Selenium?
पेज ऑब्जेक्ट मॉडल फ्रेमवर्क की आधारभूत संरचना में सरल PLog, जहाँ whereManagereIDElements AUT और इन वेब तत्वों पर काम करने वाली विधियाँ एक क्लॉग फ़ाइल के अंदर रखी जाती हैं। सत्यापन जैसे कार्य को परीक्षण विधियों के भाग के रूप में अलग रखा जाना चाहिए।
पूरा उदाहरण
परीक्षण मामला: गुरु99 डेमो साइट पर जाएं।
चरण 1) गुरु99 डेमो साइट पर जाएं
चरण 2) होम पेज पर, जांचें कि “Guru99 Bank” टेक्स्ट मौजूद है या नहीं
चरण 3) एप्लीकेशन में लॉग इन करें
चरण 4) सत्यापित करें कि होम पेज में “मैनेजर आईडी: डेमो” जैसा टेक्स्ट है
इस उदाहरण में, हम दो पृष्ठों पर काम कर रहे हैं:
- लॉग
- होम पेज (लॉगिन करने पर दिखाया गया)
तदनुसार, हम 2 POM बनाते हैं Selenium कक्षाएं
गुरु99 लॉगिन पेज POM
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99Login {
WebDriver driver;
By user99GuruName = By.name("uid");
By password99Guru = By.name("password");
By titleText =By.className("barone");
By login = By.name("btnLogin");
public Guru99Login(WebDriver driver){
this.driver = driver;
}
//Set user name in textbox
public void setUserName(String strUserName){
driver.findElement(user99GuruName).sendKeys(strUserName);
}
//Set password in password textbox
public void setPassword(String strPassword){
driver.findElement(password99Guru).sendKeys(strPassword);
}
//Click on the login button
public void clickLogin(){
driver.findElement(login).click();
}
//Get the title of Login Page
public String getLoginTitle(){
return driver.findElement(titleText).getText();
}
/**
* This POM method allows the test case to perform the login operation
* @param strUserName
* @param strPasword
* @return
*/
public void loginToGuru99(String strUserName,String strPasword){
//Fill user name
this.setUserName(strUserName);
//Fill password
this.setPassword(strPasword);
//Click Login button
this.clickLogin();
}
}
गुरु99 होम पेज POM in Selenium
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class Guru99HomePage {
WebDriver driver;
By homePageUserName = By.xpath("//table//tr[@class='heading3']");
public Guru99HomePage(WebDriver driver){
this.driver = driver;
}
//Get the User name from Home Page
public String getHomePageDashboardUserName(){
return driver.findElement(homePageUserName).getText();
}
}
गुरु99 सरल POM में Selenium परीक्षण का मामला
package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pages.Guru99HomePage;
import pages.Guru99Login;
public class Test99GuruLogin {
String driverPath = "C:\\geckodriver.exe";
WebDriver driver;
Guru99Login objLogin;
Guru99HomePage objHomePage;
@BeforeTest
public void setup(){
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://demo.guru99.com/V4/");
}
/**
* This test case will login in https://demo.guru99.com/V4/
* Verify login page title as guru99 bank
* Login to application
* Verify the home page using Dashboard message
*/
@Test(priority=0)
public void test_Home_Page_Appear_Correct(){
//Create Login Page object
objLogin = new Guru99Login(driver);
//Verify login page title
String loginPageTitle = objLogin.getLoginTitle();
Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
//login to application
objLogin.loginToGuru99("mgr123", "mgr!23");
// go the next page
objHomePage = new Guru99HomePage(driver);
//Verify home page
Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
}
पेज फैक्ट्री क्या है? Selenium?
पेज फैक्ट्री में Selenium के लिए एक इनबिल्ट पेज ऑब्जेक्ट मॉडल फ्रेमवर्क अवधारणा है Selenium वेबड्राइवर, जो निष्पादन गति के बजाय, एनोटेशन का उपयोग करके बार-बार एलिमेंट लुकअप को कम करके रखरखाव क्षमता में सुधार करता है। इसका उपयोग पेज ऑब्जेक्ट्स को इनिशियलाइज़ करने या पेज ऑब्जेक्ट को इंस्टेंटिएट करने के लिए किया जाता है। इसका उपयोग "FindElement/s" का उपयोग किए बिना पेज क्लास एलिमेंट्स को इनिशियलाइज़ करने के लिए भी किया जाता है।
यहाँ भी, हम पेज ऑब्जेक्ट रिपॉजिटरी और टेस्ट मेथड्स को अलग करने की अवधारणा का पालन करते हैं। इसके अतिरिक्त, पेजफैक्ट्री क्लास की मदद से Selenium, हम एनोटेशन का उपयोग करते हैं @फाइंडबाय WebElement ढूँढने के लिए। हम वेब तत्वों को आरंभीकृत करने के लिए initElements विधि का उपयोग करते हैं।
@फाइंडबाय स्वीकार कर सकते हैं टैगनाम, आंशिकलिंकटेक्स्ट, नाम, लिंकटेक्स्ट, आईडी, सीएसएस, क्लासनाम, एक्सपथ विशेषताओं के रूप में.
आइये पेज फैक्ट्री का उपयोग करके ऊपर दिए गए उदाहरण को देखें
पेज फैक्ट्री के साथ गुरु99 लॉगिन पेज
package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99Login {
/**
* All WebElements are identified by @FindBy annotation
*/
WebDriver driver;
@FindBy(name="uid")
WebElement user99GuruName;
@FindBy(name="password")
WebElement password99Guru;
@FindBy(className="barone")
WebElement titleText;
@FindBy(name="btnLogin")
WebElement login;
public Guru99Login(WebDriver driver){
this.driver = driver;
//This initElements method will create all WebElements
PageFactory.initElements(driver, this);
}
//Set user name in textbox
public void setUserName(String strUserName){
user99GuruName.sendKeys(strUserName);
}
//Set password in password textbox
public void setPassword(String strPassword){
password99Guru.sendKeys(strPassword);
}
//Click on login button
public void clickLogin(){
login.click();
}
//Get the title of Login Page
public String getLoginTitle(){
return titleText.getText();
}
/**
* This POM method will be exposed in test case to login in the application
* @param strUserName
* @param strPasword
* @return
*/
public void loginToGuru99(String strUserName,String strPasword){
//Fill user name
this.setUserName(strUserName);
//Fill password
this.setPassword(strPasword);
//Click Login button
this.clickLogin();
}
}
पेज फैक्ट्री के साथ गुरु99 होम पेज
package PageFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Guru99HomePage {
WebDriver driver;
@FindBy(xpath="//table//tr[@class='heading3']")
WebElement homePageUserName;
public Guru99HomePage(WebDriver driver){
this.driver = driver;
//This initElements method will create all WebElements
PageFactory.initElements(driver, this);
}
//Get the User name from Home Page
public String getHomePageDashboardUserName(){
return homePageUserName.getText();
}
}
पेज फैक्ट्री अवधारणा के साथ गुरु99 टेस्टकेस
package test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import PageFactory.Guru99HomePage;
import PageFactory.Guru99Login;
public class Test99GuruLoginWithPageFactory {
String driverPath = "C:\\geckodriver.exe";
WebDriver driver;
Guru99Login objLogin;
Guru99HomePage objHomePage;
@BeforeTest
public void setup(){
System.setProperty("webdriver.gecko.driver", driverPath);
driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://demo.guru99.com/V4/");
}
/**
* This test go to https://demo.guru99.com/V4/
* Verify login page title as guru99 bank
* Login to application
* Verify the home page using Dashboard message
*/
@Test(priority=0)
public void test_Home_Page_Appear_Correct(){
//Create Login Page object
objLogin = new Guru99Login(driver);
//Verify login page title
String loginPageTitle = objLogin.getLoginTitle();
Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));
//login to application
objLogin.loginToGuru99("mgr123", "mgr!23");
// go the next page
objHomePage = new Guru99HomePage(driver);
//Verify home page
Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manager id : mgr123"));
}
}
संपूर्ण परियोजना संरचना चित्र की तरह दिखाई देगी:
AjaxElementLocatorफैक्ट्री
AjaxElementLocatorफैक्ट्री पेजफैक्ट्री में एक आलसी लोडिंग अवधारणा है Seleniumइसका उपयोग वेब एलिमेंट्स को केवल तभी खोजने के लिए किया जाता है जब एलिमेंट्स का उपयोग किसी भी ऑपरेशन में किया जाता है। यह ऑब्जेक्ट पेज क्लास को वेबएलिमेंट्स के लिए एक टाइमआउट प्रदान करता है। पेजफ़ैक्टरी पैटर्न का उपयोग करने के प्रमुख लाभों में से एक Selenium AjaxElementLocatorFactory क्लास है.
यहाँ, जब किसी तत्व पर कोई ऑपरेशन किया जाता है, तो उसकी दृश्यता की प्रतीक्षा उसी क्षण से शुरू हो जाती है। यदि दिए गए समय अंतराल में तत्व नहीं मिलता है, तो परीक्षण का मामला निष्पादन 'NoSuchElementException' अपवाद फेंक देगा.
उदाहरण के लिए:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें











