पेज ऑब्जेक्ट मॉडल और फैक्ट्री में Selenium

⚡ स्मार्ट सारांश

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

  • मूल अवधारणा: प्रत्येक अनुप्रयोग पृष्ठ एक समर्पित पृष्ठ वर्ग से मेल खाता है, जिसमें वेबएलिमेंट्स और उन पर की गई क्रियाएं दोनों शामिल होती हैं, जिससे UI संरचना और परीक्षण तर्क के बीच स्पष्ट पृथक्करण संभव होता है।
  • कार्यान्वयन फोकस: POM पुन: प्रयोज्य और केंद्रीकृत तत्व प्रबंधन को बढ़ावा देता है - पृष्ठ तत्वों में संशोधन के लिए एकाधिक स्क्रिप्ट के बजाय केवल एक वर्ग में अद्यतन की आवश्यकता होती है।
  • डिज़ाइन लाभ: यह मॉडल स्वच्छ, मॉड्यूलर और टूल-स्वतंत्र ऑब्जेक्ट रिपॉजिटरी सुनिश्चित करता है, जो निम्न फ्रेमवर्क के साथ एकीकृत हो सकते हैं: TestNG, JUnit, Cucumber, या JBehave.
  • नामकरण परंपरा: पेज क्लासेस के भीतर विधियों को वास्तविक UI क्रियाओं को प्रतिबिंबित करना चाहिए (उदाहरण के लिए, gotoHomePage()), स्वचालन वर्कफ़्लो में अर्थगत स्पष्टता को सुदृढ़ करना।
  • उन्नत संरचना: पेज फैक्ट्री POM को परिष्कृत करने के लिए निम्न का उपयोग करती है: @FindBy एनोटेशन और PageFactory.initElements() स्वचालित वेबएलिमेंट आरंभीकरण के लिए, दोहराव को समाप्त करना findElement कहता है।
  • प्रदर्शन अनुकूलन: AjaxElementLocatorFactory आलसी लोडिंग शुरू करता है - तत्व केवल तभी स्थित होते हैं जब उन तक पहुँचा जाता है - निष्पादन दक्षता में सुधार और गतिशील पृष्ठ व्यवहार को सुंदर ढंग से संभालना।
  • परिणाम: एकीकृत दृष्टिकोण के परिणामस्वरूप आधुनिक के साथ संरेखित रखरखाव योग्य, पठनीय और मापनीय परीक्षण स्वचालन वास्तुकला प्राप्त होती है Selenium कार्य करती है।

पेज ऑब्जेक्ट मॉडल

पेज ऑब्जेक्ट मॉडल क्या है? इसके प्रमुख घटक क्या हैं?

पेज ऑब्जेक्ट मॉडल (POM) एक डिज़ाइन पैटर्न है, जिसका व्यापक रूप से परीक्षण स्वचालन में उपयोग किया जाता है, जो वेब UI तत्वों के लिए एक ऑब्जेक्ट रिपॉजिटरी बनाता है। इस मॉडल का लाभ यह है कि यह कोड दोहराव को कम करता है और परीक्षण रखरखाव में सुधार करता है।

इस मॉडल के अंतर्गत, एप्लिकेशन में प्रत्येक वेब पेज के लिए एक संगत पेज क्लास होनी चाहिए। यह पेज क्लास उस वेब पेज के वेबएलिमेंट्स की पहचान करेगी और इसमें उन वेबएलिमेंट्स पर ऑपरेशन करने वाले पेज मेथड्स भी शामिल होंगे। इन मेथड्स के नाम उनके द्वारा किए जा रहे कार्य के अनुसार दिए जाने चाहिए, अर्थात, यदि कोई लोडर पेमेंट गेटवे के प्रकट होने की प्रतीक्षा कर रहा है, तो POM मेथड का नाम waitForPaymentScreenDisplay() हो सकता है।

पेज ऑब्जेक्ट मॉडल के प्रमुख घटक

  • पृष्ठ वर्ग: प्रत्येक वेब पेज को एक अलग वर्ग के रूप में प्रस्तुत करें।
  • लोकेटर: आईडी, XPaths, या CSS चयनकर्ताओं का उपयोग करके वेब तत्वों की पहचान करें।
  • तरीके: .page तत्वों पर की गई क्रियाएं या संचालन शामिल करें.
  • पुनर्प्रयोग: Promoपरीक्षणों में कोड का पुनः उपयोग और आसान रखरखाव।
  • चिंताओ का विभाजन: बेहतर संगठन के लिए पृष्ठ संरचना को परीक्षण तर्क से स्वतंत्र रखता है।

पेज ऑब्जेक्ट मॉडल

पेज ऑब्जेक्ट मॉडल क्यों?

UI स्वचालन प्रारंभ करना Selenium वेबड्राइवर यह कोई मुश्किल काम नहीं है। आपको बस एलिमेंट्स ढूँढ़ने और उन पर ऑपरेशन करने की ज़रूरत है।

किसी वेबसाइट पर लॉग इन करने के लिए इस सरल स्क्रिप्ट पर विचार करें।

पेज ऑब्जेक्ट मॉडल

जैसा कि आप देख सकते हैं, हम केवल तत्वों को ढूंढ रहे हैं और उन तत्वों के लिए मान भर रहे हैं।

यह एक समय लेने वाली और त्रुटि-प्रवण स्क्रिप्ट है। शुरुआत में यह आसान लगता है, लेकिन जैसे-जैसे टेस्ट सूट का विस्तार होता है, तत्वों में बदलाव को प्रबंधित करना मुश्किल होता जाता है। लेकिन समय के साथ, टेस्ट सूट बढ़ता जाएगा। जैसे-जैसे आप अपने कोड में और ज़्यादा लाइनें जोड़ते जाएँगे, चीज़ें और मुश्किल होती जाएँगी।

स्क्रिप्ट रखरखाव के साथ मुख्य समस्या यह है कि यदि 10 अलग-अलग स्क्रिप्ट एक ही पेज एलिमेंट का उपयोग कर रही हैं, तो उस एलिमेंट में किसी भी बदलाव के साथ, आपको सभी 10 स्क्रिप्ट को बदलना होगा। यह समय लेने वाला और त्रुटिपूर्ण है।

स्क्रिप्ट रखरखाव का एक बेहतर तरीका एक अलग क्लास फ़ाइल बनाना है जो वेब एलिमेंट्स को ढूँढ़े, उन्हें भर सके या उन्हें सत्यापित कर सके। इस क्लास का फिर से इस्तेमाल एक ही एलिमेंट के साथ इंटरैक्ट करने वाली कई टेस्ट स्क्रिप्ट्स में किया जा सकता है। भविष्य में, अगर वेब एलिमेंट में कोई बदलाव होता है, तो हमें सिर्फ़ एक क्लास फ़ाइल में बदलाव करना होगा, न कि 10 अलग-अलग स्क्रिप्ट्स में।

इस दृष्टिकोण को पेज ऑब्जेक्ट मॉडल कहा जाता है Seleniumयह कोड को अधिक पठनीय, रखरखाव योग्य और पुन: प्रयोज्य बनाने में मदद करता है।

 पेज ऑब्जेक्ट मॉडल

👉 निःशुल्क लाइव के लिए नामांकन करें Selenium परियोजना

पीओएम के लाभ

  1. पेज ऑब्जेक्ट डिज़ाइन पैटर्न कहता है कि UI में संचालन और प्रवाह को सत्यापन से अलग किया जाना चाहिए। यह अवधारणा हमारे कोड को साफ़ और समझने में आसान बनाती है।
  2. दूसरा लाभ यह है कि ऑब्जेक्ट रिपॉजिटरी परीक्षण मामलों से स्वतंत्र होती है, इसलिए हम एक ही ऑब्जेक्ट रिपॉजिटरी का उपयोग विभिन्न उपकरणों के साथ विभिन्न उद्देश्यों के लिए कर सकते हैं। उदाहरण के लिए, हम पेज ऑब्जेक्ट मॉडल को इसमें एकीकृत कर सकते हैं। Selenium साथ में TestNG/JUnit कार्यात्मक के लिए परीक्षण और साथ ही JBehave/Cucumber स्वीकृति परीक्षण के लिए।
  3. कोड कम और अनुकूलित हो जाता है क्योंकि यह POM क्लासों में पृष्ठ विधियों का पुनः उपयोग करता है।
  4. विधियों को अधिक यथार्थवादी नाम मिलते हैं जिन्हें आसानी से UI में होने वाले ऑपरेशन के साथ मैप किया जा सकता है। यानी यदि बटन पर क्लिक करने के बाद हम होम पेज पर पहुंचते हैं, तो विधि का नाम 'gotoHomePage()' जैसा होगा।

POM को कैसे क्रियान्वित करें? Selenium?

पेज ऑब्जेक्ट मॉडल फ्रेमवर्क की आधारभूत संरचना में सरल PLog, जहाँ whereManagereIDElements AUT और इन वेब तत्वों पर काम करने वाली विधियाँ एक क्लॉग फ़ाइल के अंदर रखी जाती हैं। सत्यापन जैसे कार्य को परीक्षण विधियों के भाग के रूप में अलग रखा जाना चाहिए।

POM लागू करें

पूरा उदाहरण

परीक्षण मामला: गुरु99 डेमो साइट पर जाएं।

चरण 1) गुरु99 डेमो साइट पर जाएं

POM लागू करें

चरण 2) होम पेज पर, जांचें कि “Guru99 Bank” टेक्स्ट मौजूद है या नहीं

POM लागू करें

चरण 3) एप्लीकेशन में लॉग इन करें

POM लागू करें

चरण 4) सत्यापित करें कि होम पेज में “मैनेजर आईडी: डेमो” जैसा टेक्स्ट है

POM लागू करें

इस उदाहरण में, हम दो पृष्ठों पर काम कर रहे हैं:

  1. लॉग
  2. होम पेज (लॉगिन करने पर दिखाया गया)

तदनुसार, हम 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 विधि का उपयोग करते हैं।

पेज फैक्ट्री में Selenium

@फाइंडबाय स्वीकार कर सकते हैं टैगनाम, आंशिकलिंकटेक्स्ट, नाम, लिंकटेक्स्ट, आईडी, सीएसएस, क्लासनाम, एक्सपथ विशेषताओं के रूप में.

आइये पेज फैक्ट्री का उपयोग करके ऊपर दिए गए उदाहरण को देखें

पेज फैक्ट्री के साथ गुरु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"));
    }
}

संपूर्ण परियोजना संरचना चित्र की तरह दिखाई देगी:

पेज फैक्ट्री में Selenium

AjaxElementLocatorफैक्ट्री

AjaxElementLocatorफैक्ट्री पेजफैक्ट्री में एक आलसी लोडिंग अवधारणा है Seleniumइसका उपयोग वेब एलिमेंट्स को केवल तभी खोजने के लिए किया जाता है जब एलिमेंट्स का उपयोग किसी भी ऑपरेशन में किया जाता है। यह ऑब्जेक्ट पेज क्लास को वेबएलिमेंट्स के लिए एक टाइमआउट प्रदान करता है। पेजफ़ैक्टरी पैटर्न का उपयोग करने के प्रमुख लाभों में से एक Selenium AjaxElementLocatorFactory क्लास है.

यहाँ, जब किसी तत्व पर कोई ऑपरेशन किया जाता है, तो उसकी दृश्यता की प्रतीक्षा उसी क्षण से शुरू हो जाती है। यदि दिए गए समय अंतराल में तत्व नहीं मिलता है, तो परीक्षण का मामला निष्पादन 'NoSuchElementException' अपवाद फेंक देगा.

AjaxElement लोकेटर फैक्ट्री

उदाहरण के लिए:

AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10);
PageFactory.initElements(factory, this);

डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें

अक्सर पूछे जाने वाले प्रश्न

पेज ऑब्जेक्ट मॉडल एक डिज़ाइन पैटर्न है जो वेब पेज के तत्वों को अलग-अलग वर्गों में विभाजित करता है। यह UI इंटरैक्शन को परीक्षण तर्क से अलग करके स्वचालन को सरल बनाता है, जिससे स्पष्टता, मापनीयता और कोड दोहराव में कमी आती है।

In SeleniumPOM प्रत्येक वेब पेज को एक समर्पित क्लास के रूप में दर्शाता है जिसमें लोकेटर और क्रियाएँ होती हैं। यह UI तत्वों को समाहित करता है, जिससे परीक्षण स्क्रिप्ट अंतर्निहित पृष्ठ संरचना परिवर्तनों से स्वतंत्र रहती हैं।

POM एक स्टैंडअलोन फ्रेमवर्क नहीं, बल्कि एक डिज़ाइन पैटर्न है। इसे किसी भी ऑटोमेशन फ्रेमवर्क में एकीकृत करके परीक्षणों को कुशलतापूर्वक संरचित किया जा सकता है, जिससे बेहतर संगठन, पुन: प्रयोज्यता और रखरखाव सुनिश्चित होता है।

POM एक डिज़ाइन सिद्धांत है जहाँ प्रत्येक वेब पेज को परिभाषित लोकेटर और विधियों के साथ एक क्लास के रूप में मॉडल किया जाता है। यह परीक्षण तर्क को UI तत्वों से अलग करता है, जिससे पठनीयता, मापनीयता और दीर्घकालिक रखरखाव में सुधार होता है।

POM पृष्ठ अमूर्तता के लिए डिज़ाइन संरचना को परिभाषित करता है, जबकि पेज फ़ैक्टरी एनोटेशन और विधियाँ प्रदान करता है (@FindBy) वेब तत्वों को कुशलतापूर्वक आरंभ करने के लिए। पेज फ़ैक्टरी, POM का एक कार्यान्वयन संवर्द्धन है।

POM, एलिमेंट लोकेटर और पेज क्रियाओं को समर्पित क्लासेस के भीतर केंद्रीकृत करता है। किसी भी UI संशोधन के लिए केवल एक ही स्थान पर अपडेट की आवश्यकता होती है, जिससे पुनर्लेखन कम से कम होता है, कोड के पुन: उपयोग में सुधार होता है, और परीक्षण रखरखाव में तेज़ी आती है।

हाँ। AI-संचालित परीक्षण जनरेटर UI पदानुक्रमों का विश्लेषण करके स्वचालित रूप से POM कक्षाएं बना सकते हैं, चिंताओं के तार्किक पृथक्करण को बनाए रखते हुए एंड-टू-एंड परीक्षण निर्माण में तेजी ला सकते हैं।

POM मॉड्यूलर और पुन: प्रयोज्य परीक्षण घटकों को बढ़ावा देता है, जिससे AI-आधारित परीक्षण रखरखाव उपकरणों के साथ एकीकरण संभव होता है, जो लोकेटरों को स्वचालित रूप से अपडेट करते हैं, जिससे स्क्रिप्ट की नाजुकता और रखरखाव का खर्च कम होता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: