Lehekülje objekti mudel ja tehas Selenium

⚡ Nutikas kokkuvõte

Leheobjekti mudel ja lehetehas Selenium määratleda struktureeritud disainimuster robustsete ja hooldatavate testimisautomaatika raamistike loomiseks. See rõhutab lehespetsiifiliste klasside loomist, mis kapseldavad veebielemente ja nende käitumist, vähendades seeläbi dubleerimist ning parandades loetavust ja skaleeritavust. Selenium testiskriptid.

  • Põhikontseptsioon: Iga rakenduse leht vastab spetsiaalsele leheklassile, mis sisaldab nii veebielemente (WebElements) kui ka nendega tehtavaid toiminguid, võimaldades selget eraldamist kasutajaliidese struktuuri ja testimisloogika vahel.
  • Rakendamise fookus: POM edendab korduvkasutatavat ja tsentraliseeritud elementide haldamist – leheelementide muutmine nõuab värskendusi ainult ühes klassis, mitte mitmes skriptis.
  • Disaini eelis: Mudel tagab puhtamad, modulaarsed ja tööriistadest sõltumatud objektihoidlad, mis integreeruvad selliste raamistikega nagu TestNG, JUnit, Cucumbervõi JBehave.
  • Nimetamiskonventsioon: Lehekülje klasside meetodid peavad peegeldama tegelikke kasutajaliidese toiminguid (nt gotoHomePage()), tugevdades automatiseerimise töövoogude semantilist selgust.
  • Täiustatud struktuur: Page Factory täiustab POM-i, kasutades @FindBy märkused ja PageFactory.initElements() automaatseks WebElemendi initsialiseerimiseks, vältides korduvaid findElement kõned.
  • Toimivuse optimeerimine: AjaxElementLocatorFactory tutvustab laisat laadimist – elemente leitakse ainult siis, kui neile juurde pääsetakse –, parandades teostuse efektiivsust ja käsitledes dünaamilist lehe käitumist graatsiliselt.
  • Tulemus: Ühtne lähenemisviis annab tulemuseks hooldatava, loetava ja skaleeritava testiautomaatika arhitektuuri, mis on kooskõlas tänapäevaste standarditega. Selenium tavad.

Lehekülje objekti mudel

Mis on leheobjektimudel? Millised on selle põhikomponendid?

Lehekülje objekti mudel (POM) on testimisautomaatikas laialdaselt kasutatav disainimuster, mis loob veebiliidese elementide jaoks objektihoidla. Selle mudeli eeliseks on koodi dubleerimise vähendamine ja testide hoolduse parandamine.

Selle mudeli kohaselt peaks iga rakenduse veebilehe jaoks olema vastav leheklass. See leheklass tuvastab selle veebilehe veebielemendid (WebElements) ja sisaldab ka lehemeetodeid, mis nende veebielementidega toiminguid teevad. Nende meetodite nimed tuleks anda vastavalt ülesandele, mida nad täidavad, nt kui laadur ootab maksevärava ilmumist, võib POM-meetodi nimi olla waitForPaymentScreenDisplay().

Lehe objektimudeli põhikomponendid

  • Lehekülje klassid: Esitage iga veebileht eraldi klassina.
  • Lokaatorid: Veebielementide tuvastamine ID-de, XPath-ide või CSS-selektorite abil.
  • Meetodid: Sisaldavad .page elementidega teostatavaid toiminguid või operatsioone.
  • Korduvkasutatavus: Promotestikoodi taaskasutamine ja lihtsam hooldus testide vahel.
  • Murede lahusus: Hoiab lehe struktuuri parema organiseerimise tagamiseks testiloogikast sõltumatuna.

Lehekülje objekti mudel

Miks leheobjekti mudel?

Kasutajaliidese automatiseerimise käivitamine Selenium Veebidraiver pole keeruline ülesanne. Sa pead lihtsalt leidma elemendid ja nendega tehteid tegema.

Mõelge sellele lihtsale skriptile veebisaidile sisselogimiseks.

Lehekülje objekti mudel

Nagu näete, ei tee me muud, kui otsime elemente ja täidame nende elementide väärtusi.

See on aeganõudev ja veaaldis skript. Alguses tundub see lihtne, kuid testikomplekti laienedes muutub elementide muudatuste haldamine keerulisemaks. Aja jooksul aga testikomplekt kasvab. Mida rohkem ridu koodi lisad, seda keerulisemaks asjad muutuvad.

Skriptihoolduse peamine probleem seisneb selles, et kui 10 erinevat skripti kasutavad sama leheelementi, peate selle elemendi mis tahes muudatuse korral muutma kõiki 10 skripti. See on aeganõudev ja veaterohke.

Skriptide haldamise parem lähenemisviis on luua eraldi klassifail, mis otsib veebielemente, täidab need või kontrollib neid. Seda klassi saab seejärel uuesti kasutada mitme sama elemendiga suhtleva testiskripti puhul. Tulevikus, kui veebielemendis toimub muudatus, peame muudatuse tegema ainult ühes klassifailis, mitte kümnes erinevas skriptis.

Seda lähenemisviisi nimetatakse leheobjekti mudeliks SeleniumSee aitab muuta koodi loetavamaks, hooldatavamaks ja taaskasutatavamaks.

 Lehekülje objekti mudel

👉 Registreeru tasuta otseülekande saamiseks Selenium Projekt

POM-i eelised

  1. Leheobjekti kujundusmuster ütleb, et kasutajaliidese toimingud ja vood tuleks kinnitamisest eraldada. See kontseptsioon muudab meie koodi puhtamaks ja hõlpsasti mõistetavaks.
  2. Teine eelis on see, et objektihoidla on testijuhtumitest sõltumatu, seega saame sama objektihoidlat kasutada erinevatel eesmärkidel ja erinevate tööriistadega. Näiteks saame integreerida leheobjektimudeli Selenium koos TestNG/JUnit funktsionaalseks Testimine ja samal ajal JBehave/Cucumber vastuvõtutesti jaoks.
  3. Code muutub väiksemaks ja optimeerituks, kuna see taaskasutab POM-klassides lehemeetodeid.
  4. Meetodid saavad realistlikumad nimed, mida saab hõlpsasti siduda kasutajaliideses toimuva toiminguga. Näiteks kui pärast nupule klõpsamist jõuame avalehele, on meetodi nimi umbes selline: 'gotoHomePage()'.

Kuidas POM-i rakendada Selenium?

Lihtne PLog Page Object Model raamistiku alusstruktuuris, kus whereManagerIelemendid AUT Ja nende veebielementidega töötavad meetodid salvestatakse ummistusfaili. Selline ülesanne nagu verifitseerimine peaks olema eraldi osa testimismeetoditest.

Rakendage POM

Täielik näide

TestCase: Minna Guru99 demosait.

Samm 1) Minge aadressile Guru99 demosait

Rakendage POM

2. samm) Kontrollige avalehel, kas tekst „Guru99 Bank” on kohal

Rakendage POM

Samm 3) Logige rakendusse sisse

Rakendage POM

Samm 4) Veenduge, et avalehel oleks tekst „halduri ID: demo”

Rakendage POM

Selles näites on meil tegemist kahe lehega:

  1. Sisselogimise lehele
  2. Avaleht (kuvatakse pärast sisselogimist)

Sellest lähtuvalt loome 2 POM-i Selenium klassid

Guru99 Sisselogimislehe 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 Avaleht POM sisse 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 Lihtne POM sisse Selenium Katsejuhtum

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

Milles on Page Factory Selenium?

Lehe tehas sisse Selenium on sisseehitatud leheobjekti mudeli raamistiku kontseptsioon Selenium WebDriver, mis parandab hooldatavust, vähendades korduvaid elementide otsinguid annotatsioonide abil, mitte täitmiskiiruse abil. Seda kasutatakse leheobjektide initsialiseerimiseks või leheobjekti enda loomiseks. Seda kasutatakse ka leheklassi elementide initsialiseerimiseks ilma „FindElement/s” kasutamata.

Ka siin järgime leheobjektide hoidla ja testimismeetodite eraldamise kontseptsiooni. Lisaks klassi PageFactory in abiga Selenium, kasutame märkusi @FindBy WebElementi leidmiseks. Veebielementide initsialiseerimiseks kasutame initElementsi meetodit.

Page Factory In Selenium

@FindBy võib vastu võtta tagName, osalineLinkText, nimi, lingitekst, id, css, klassinimi, xpath atribuutidena.

Vaatame sama näidet nagu ülal, kasutades Page Factory

Guru99 Sisselogimisleht Page Factoryga

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 Avaleht koos Page Factoryga

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 koos Page Factory kontseptsiooniga

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

Projekti täielik struktuur näeb välja nagu diagramm:

Lehe tehas sisse Selenium

AjaxElementLocatorFactory

AjaxElementLocatorFactory on PageFactory laisk laadimiskontseptsioon SeleniumSeda kasutatakse veebielementide leidmiseks ainult siis, kui elemente kasutatakse mis tahes toimingus. See määrab veebielementide jaoks ajalõpu objektilehe klassile. Üks PageFactory mustri kasutamise peamisi eeliseid Selenium on AjaxElementLocatorFactory klass.

Siin, kui elemendiga toimingut tehakse, algab selle nähtavuse ootamine alles sellest hetkest. Kui elementi antud ajavahemikus ei leita, Testjuhtum täitmine teeb erandi „NoSuchElementException”.

AjaxElement Locatori tehas

Näiteks:

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

Lae alla Selenium Selle õpetuse demo projektifailid

KKK

Lehe objektimudel on kujundusmuster, mis abstracts veebilehe elemendid eraldi klassidesse. See lihtsustab automatiseerimist, eraldades kasutajaliidese interaktsioonid testiloogikast, edendades selgust, skaleeritavust ja vähendades koodi dubleerimist.

In SeleniumPOM esindab iga veebilehte spetsiaalse klassina, mis sisaldab lokaatoreid ja toiminguid. See kapseldab kasutajaliidese elemente, võimaldades testiskriptidel jääda sõltumatuks aluseks olevatest lehe struktuuri muudatustest.

POM ei ole iseseisev raamistik, vaid disainimuster. Selle saab integreerida mis tahes automatiseerimisraamistikku, et teste tõhusalt struktureerida, tagades parema korralduse, taaskasutatavuse ja hooldatavuse.

POM on disainipõhimõte, mille kohaselt iga veebileht modelleeritakse klassina, millel on määratletud lokaatorid ja meetodid. See lahutab testiloogika kasutajaliidese elementidest, parandades loetavust, skaleeritavust ja pikaajalist hooldust.

POM määratleb lehe abs-struktuuritractsiooni, samas kui Page Factory pakub annotatsioone ja meetodeid (@FindBy) veebielementide tõhusaks initsialiseerimiseks. Page Factory on POM-i täiustus.

POM koondab elementide asukoha määrajad ja lehe toimingud spetsiaalsetesse klassidesse. Iga kasutajaliidese muudatus nõuab värskendusi ainult ühes kohas, minimeerides ümbertöötamist, parandades koodi taaskasutamist ja kiirendades testide hooldust.

Jah. Tehisintellektil põhinevad testigeneraatorid saavad POM-klasse automaatselt luua, analüüsides kasutajaliidese hierarhiaid, säilitades murede loogilise eraldatuse ja kiirendades samal ajal otsast lõpuni testide loomist.

POM propageerib modulaarseid ja korduvkasutatavaid testikomponente, võimaldades integratsiooni tehisintellektil põhinevate testihooldustööriistadega, mis värskendavad lokaatoreid automaatselt, vähendades skriptide haavatavust ja hoolduskulusid.

Võta see postitus kokku järgmiselt: