Oldal objektum modell és gyár Selenium

⚡ Okos összefoglaló

Oldalobjektum-modell és oldalgyár Selenium strukturált tervezési mintát definiáljon robusztus, karbantartható tesztautomatizálási keretrendszerek építéséhez. Hangsúlyozza az oldalspecifikus osztályok létrehozását, amelyek magukban foglalják a webelemeket és azok viselkedését, ezáltal csökkentve az ismétlődést, és javítva az olvashatóságot és skálázhatóságot. Selenium tesztszkriptek.

  • Alapkoncepció: Minden alkalmazásoldal egy dedikált oldalosztálynak felel meg, amely tartalmazza mind a webelemeket, mind a rajtuk végrehajtott műveleteket, lehetővé téve a felhasználói felület struktúrája és a tesztlogika egyértelmű elkülönítését.
  • Megvalósítási fókusz: A POM az újrafelhasználható és központosított elemkezelést támogatja – az oldalelemek módosításához csak egy osztályban kell frissítéseket végezni több szkript helyett.
  • Tervezési előny: A modell letisztultabb, moduláris és eszközfüggetlen objektumtárakat biztosít, amelyek integrálhatók olyan keretrendszerekkel, mint a TestNG, JUnit, Cucumber, vagy JBehave.
  • Elnevezési: Az oldalosztályokon belüli metódusoknak tükrözniük kell a tényleges felhasználói felület műveleteket (pl. gotoHomePage()), megerősítve a szemantikai tisztaságot az automatizálási munkafolyamatokban.
  • Továbbfejlesztett szerkezet: A Page Factory finomítja a POM-ot a következővel: @FindBy jegyzetek és PageFactory.initElements() az automatikus WebElement inicializáláshoz, kiküszöbölve az ismétlődő műveleteket findElement felhívja.
  • Teljesítmény optimalizálás: AjaxElementLocatorFactory Bevezeti a lusta betöltést – az elemek csak akkor találhatók meg, ha hozzáférnek –, ami javítja a végrehajtás hatékonyságát és kecsesen kezeli a dinamikus oldalviselkedést.
  • Eredmény: Az egységes megközelítés karbantartható, olvasható és skálázható tesztautomatizálási architektúrát eredményez, amely összhangban van a modern szabványokkal. Selenium gyakorlatok.

Oldalobjektum modell

Mi az Page Object Model? Melyek a fő összetevői?

Oldalobjektum modell (POM) egy, a tesztautomatizálásban népszerűen használt tervezési minta, amely objektumtárat hoz létre a webes felhasználói felület elemei számára. A modell előnye, hogy csökkenti a kód duplikációját és javítja a tesztkarbantartást.

Ebben a modellben az alkalmazás minden weboldalához tartoznia kell egy Page osztálynak. Ez a Page osztály azonosítja az adott weboldal webelemeit, és tartalmazza azokat a Page metódusokat is, amelyek műveleteket hajtanak végre ezeken a webelemeken. Ezen metódusok nevét az általuk végrehajtott feladat szerint kell megadni, azaz ha egy betöltő a fizetési átjáró megjelenésére vár, a POM metódus neve lehet waitForPaymentScreenDisplay().

Az oldal objektummodelljének főbb összetevői

  • Oldalosztályok: Minden weboldalt külön osztályként kell ábrázolni.
  • Helymeghatározók: Webes elemek azonosítása azonosítók, XPath útvonalak vagy CSS-szelektorok segítségével.
  • Módszerek: A .page elemeken végrehajtott műveleteket vagy műveleteket tartalmazza.
  • Újrahasználhatóság: Promotesztkód újrafelhasználása és egyszerűbb karbantartás a tesztek között.
  • A gondok szétválasztása: Az oldal szerkezetét függetleníti a tesztlogikától a jobb szervezés érdekében.

Oldalobjektum modell

Miért az oldalobjektum modell?

UI automatizálás indítása itt: Selenium webdriver NEM egy nehéz feladat. Csak meg kell találnod az elemeket, és műveleteket kell végrehajtanod rajtuk.

Vegyük figyelembe ezt az egyszerű szkriptet egy webhelyre való bejelentkezéshez.

Oldalobjektum modell

Amint láthatja, mi csak elemeket keresünk, és ezekhez az elemekhez értékeket töltünk ki.

Ez egy időigényes és hibalehetőségekkel teli szkript. Elsőre egyszerűnek tűnik, de ahogy a tesztkészlet bővül, az elemváltozások kezelése egyre nehezebbé válik. Idővel azonban a tesztkészlet is növekedni fog. Ahogy egyre több sort adsz hozzá a kódodhoz, a dolgok egyre nehezebbé válnak.

A szkriptkarbantartással kapcsolatos fő probléma az, hogy ha 10 különböző szkript használja ugyanazt az oldalelemet, az elem bármilyen módosítása esetén mind a 10 szkriptet módosítania kell. Ez időigényes és hibás.

A szkriptek karbantartásának jobb megközelítése egy külön osztályfájl létrehozása, amely megkeresi a webes elemeket, kitölti vagy ellenőrzi azokat. Ez az osztály ezután több tesztszkriptben is felhasználható, amelyek ugyanazzal az elemmel lépnek interakcióba. A jövőben, ha változás történik a webes elemben, a módosítást csak 1 osztályfájlban kell elvégeznünk, nem pedig 10 különböző szkriptben.

Ezt a megközelítést oldalobjektum modellnek nevezik SeleniumSegít abban, hogy a kód olvashatóbb, karbantarthatóbb és újrafelhasználhatóbb legyen.

 Oldalobjektum modell

👉 Regisztrálj ingyenes élő közvetítésre Selenium NetPoulSafe projekt

A POM előnyei

  1. Az oldalobjektum-tervezési minta szerint a felhasználói felület műveleteit és folyamatait el kell választani az ellenőrzéstől. Ez a koncepció tisztábbá és könnyen érthetővé teszi kódunkat.
  2. A második előny, hogy az objektumtár független a tesztesetektől, így ugyanazt az objektumtárat különböző célokra, különböző eszközökkel használhatjuk. Például integrálhatjuk az Page Object Model-t a következőbe: Selenium ahol TestNG/JUnit funkcionális Tesztelés és ezzel egy időben a JBehave/Cucumber átvételi teszteléshez.
  3. Code kevesebb és optimalizáltabb lesz, mivel újrafelhasználja az oldalmetódusokat a POM osztályokban.
  4. A metódusok realisztikusabb neveket kapnak, amelyek könnyen leképezhetők a felhasználói felületen zajló műveletre. Például, ha a gombra kattintás után a kezdőlapra jutunk, a metódus neve a következőhöz hasonló lesz: „gotoHomePage()”.

Hogyan lehet megvalósítani a POM-ot? Selenium?

Egyszerű PLog a Page Object Model keretrendszer alapstruktúrájában, ahol a whereManagerEI elemei a AUT És az ezeken a webes elemeken működő metódusok egy clog fájlban vannak tárolva. Az olyan feladatoknak, mint az ellenőrzés, külön kell lenniük a tesztmetódusok részeként.

Végezze el a POM-ot

Teljes példa

Próbaper: Tovább Guru99 Demó oldal.

1. lépés) Lépjen ide Guru99 Demóoldal

Végezze el a POM-ot

2. lépés) A kezdőlapon ellenőrizze, hogy a „Guru99 Bank” jelen van

Végezze el a POM-ot

3. lépés) Jelentkezzen be az alkalmazásba

Végezze el a POM-ot

4. lépés: Győződjön meg arról, hogy a kezdőlapon „Manger Id: demo” szöveg szerepel-e

Végezze el a POM-ot

Ebben a példában két oldallal foglalkozunk:

  1. Bejelentkezés oldal
  2. Kezdőlap (bejelentkezés után jelenik meg)

Ennek megfelelően 2 POM-ot hozunk létre Selenium osztályok

Guru99 Bejelentkezési oldal 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();        
    }
}

Guru99 Kezdőlap POM be 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();
        }
}

Guru99 Egyszerű POM Selenium Vizsgálati eset

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"));
    }

Miben található a Page Factory Selenium?

Oldal gyári be Selenium egy beépített oldalobjektum modell keretkoncepció Selenium WebDriver, amely a karbantarthatóságot javítja az ismétlődő elemkeresések annotációk használatával történő csökkentésével, nem pedig a végrehajtási sebességgel. Oldalobjektumok inicializálására vagy magának az Oldalobjektumnak a példányosítására szolgál. Oldalosztály-elemek inicializálására is használják „FindElement/s” használata nélkül.

Itt is követjük a Page Object Repository és a Test Methods elkülönítésének koncepcióját. Ezenkívül a PageFactory in osztály segítségével Selenium, megjegyzéseket használunk @FindBy a WebElement megtalálásához. Az initElements metódust használjuk a webelemek inicializálásához.

Page Factory In Selenium

@FindBy el tudja fogadni tagName, partialLinkText, name, linkText, id, css, className, xpath attribútumokként.

Nézzük meg a fenti példát a Page Factory használatával

Guru99 Bejelentkezési oldal a Page Factory-val

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();           
    }
}

Guru99 Kezdőlap a Page Factory-val

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();
        }
}

Guru99 TestCase Page Factory koncepcióval

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"));
    }
}

A teljes projektstruktúra a diagramhoz hasonlóan fog kinézni:

Oldal gyári be Selenium

AjaxElementLocatorFactory

AjaxElementLocatorFactory a PageFactory lusta betöltési koncepciója SeleniumCsak akkor használják a webes elemek megkeresésére, ha az elemeket valamilyen műveletben használják. Időtúllépést rendel a WebElements objektum oldalosztályához. A PageFactory minta használatának egyik legfontosabb előnye a Selenium az AjaxElementLocatorFactory osztály.

Itt, amikor egy műveletet végrehajtunk egy elemen, a láthatóságára való várakozás csak ettől a pillanattól kezdődik. Ha az elem nem található meg az adott időintervallumban, Teszt eset végrehajtása „NoSuchElementException” kivételt fog dobni.

AjaxElement lokátor gyár

Például:

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

Töltse le a Selenium Projektfájlok a bemutatóhoz ebben az oktatóanyagban

GYIK

Az Page Object Model egy olyan tervezési minta, amelytracA ts weboldalelemeket külön osztályokba sorolja. Leegyszerűsíti az automatizálást azáltal, hogy elválasztja a felhasználói felület interakcióit a tesztlogikától, elősegítve az átláthatóságot, a skálázhatóságot és a kódduplikáció csökkentését.

In SeleniumA POM minden weboldalt egy dedikált osztályként ábrázol, amely lokátorokat és műveleteket tartalmaz. Magában foglalja a felhasználói felület elemeit, lehetővé téve, hogy a tesztszkriptek függetlenek maradjanak az alapul szolgáló oldalszerkezeti változásoktól.

A POM nem egy önálló keretrendszer, hanem egy tervezési minta. Bármely automatizálási keretrendszerbe integrálható a tesztek hatékony strukturálása érdekében, biztosítva a jobb szervezettséget, újrafelhasználhatóságot és karbantarthatóságot.

A POM egy olyan tervezési elv, ahol minden weboldalt osztályként modelleznek, meghatározott lokátorokkal és metódusokkal. Ez elválasztja a tesztlogikát a felhasználói felület elemeitől, javítva az olvashatóságot, a skálázhatóságot és a hosszú távú karbantartást.

A POM meghatározza az oldal absz tervezési struktúrájáttracmíg a Page Factory annotációkat és metódusokat biztosít (@FindBy) a webes elemek hatékony inicializálásához. A Page Factory a POM implementációs továbbfejlesztése.

A POM (Point of Operation Operations, azaz a POM) dedikált osztályokon belül központosítja az elemkeresőket és az oldalműveleteket. Bármilyen felhasználói felület módosítása egyetlen helyen igényel frissítéseket, minimalizálva az átdolgozást, javítva a kód újrafelhasználását és felgyorsítva a tesztek karbantartását.

Igen. A mesterséges intelligencia által vezérelt tesztgenerátorok automatikusan létrehozhatnak POM osztályokat a felhasználói felület hierarchiáinak elemzésével, fenntartva a problémák logikai elkülönítését, miközben felgyorsítják a teljes teszt létrehozását.

A POM moduláris és újrafelhasználható tesztkomponenseket támogat, lehetővé téve az integrációt a mesterséges intelligencia alapú tesztkarbantartó eszközökkel, amelyek automatikusan frissítik a lokátorokat, csökkentve a szkriptek sérülékenységét és a karbantartási terhelést.

Foglald össze ezt a bejegyzést a következőképpen: