Sivun kohteen malli ja tehdas Selenium

โšก ร„lykรคs yhteenveto

Sivuobjektimalli ja sivutehdas Selenium mรครคrittelee strukturoidun suunnittelumallin vankkojen ja yllรคpidettรคvien testiautomaatiokehysten rakentamiseksi. Se korostaa sivukohtaisten luokkien luomista, jotka kapseloivat WebElements-elementit ja niiden toiminnan, mikรค vรคhentรครค pรครคllekkรคisyyksiรค ja parantaa luettavuutta ja skaalautuvuutta. Selenium testiskriptit.

  • Ydinkonsepti: Jokainen sovellussivu vastaa omaa sivuluokkaansa, joka sisรคltรครค sekรค verkkoelementit (WebElements) ettรค niille suoritettavat toiminnot, mikรค mahdollistaa kรคyttรถliittymรคrakenteen ja testilogiikan selkeรคn erottelun.
  • Toteutuksen painopiste: POM edistรครค uudelleenkรคytettรคvรครค ja keskitettyรค elementtien hallintaa โ€“ sivuelementtien muutokset vaativat pรคivityksiรค vain yhdessรค luokassa useiden komentosarjojen sijaan.
  • Suunnittelun etu: Malli varmistaa puhtaammat, modulaariset ja tyรถkaluista riippumattomat objektivarastot, jotka voidaan integroida esimerkiksi seuraaviin kehyksiin: TestNG, JUnit, Cucumbertai JBehave.
  • Nimeรคmissopimus: Sivuluokkien metodien on peilattava todellisia kรคyttรถliittymรคn toimintoja (esim. gotoHomePage()), mikรค vahvistaa semanttista selkeyttรค automaatiotyรถnkuluissa.
  • Parannettu rakenne: Page Factory tarkentaa POM:ia kรคyttรคmรคllรค @FindBy merkinnรคt ja PageFactory.initElements() automaattista WebElement-alustusta varten, mikรค poistaa toistuvat findElement puhelut.
  • Suorituskyvyn optimointi: AjaxElementLocatorFactory esittelee laiskan latauksen โ€“ elementit paikannetaan vain silloin, kun niitรค kรคytetรครคn โ€“ mikรค parantaa suoritustehokkuutta ja kรคsittelee dynaamista sivun toimintaa sulavasti.
  • Tulokset: Yhtenรคinen lรคhestymistapa johtaa yllรคpidettรคvรครคn, luettavaan ja skaalautuvaan testiautomaatioarkkitehtuuriin, joka on linjassa nykyaikaisen Selenium kรคytรคntรถjรค.

Sivun objektimalli

Mikรค on Page Object Model? Mitkรค ovat sen keskeiset osat?

Sivun objektimalli (POM) on testiautomaatiossa yleisesti kรคytetty suunnittelumalli, joka luo objektisรคilรถn verkkokรคyttรถliittymรคn elementeille. Mallin etuna on, ettรค se vรคhentรครค koodin pรครคllekkรคisyyttรค ja parantaa testien yllรคpitoa.

Tรคssรค mallissa jokaiselle sovelluksen verkkosivulle tulisi olla vastaava sivuluokka. Tรคmรค sivuluokka tunnistaa kyseisen verkkosivun web-elementit (WebElements) ja sisรคltรครค myรถs sivumetodeja (Page Methods), jotka suorittavat toimintoja nรคille web-elementeille. Nรคiden metodien nimet tulisi antaa niiden suorittaman tehtรคvรคn mukaan, eli jos lataaja odottaa maksuyhdyskรคytรคvรคn ilmestymistรค, POM-metodin nimi voi olla waitForPaymentScreenDisplay().

Sivuobjektimallin keskeiset komponentit

  • Sivuluokat: Esittele jokainen verkkosivu erillisenรค luokkana.
  • Paikannin: Tunnista verkkoelementit tunnisteiden, XPath-lausekkeiden tai CSS-valitsimien avulla.
  • Menetelmรคt: Sisรคltรครค .page-elementeille suoritettavia toimintoja tai toimintoja.
  • Uudelleenkรคytettรคvyys: Promotestikoodin uudelleenkรคyttรถ ja helpompi yllรคpito eri testien vรคlillรค.
  • Huolien erottelu: Pitรครค sivurakenteen erillรครคn testilogiikasta paremman organisoinnin takaamiseksi.

Sivun objektimalli

Miksi sivuobjektimalli?

Kรคyttรถliittymรคautomaation aloittaminen Selenium web-ajuri ei ole vaikea tehtรคvรค. Sinun tarvitsee vain lรถytรครค elementtejรค ja suorittaa niille laskutoimituksia.

Harkitse tรคtรค yksinkertaista skriptiรค verkkosivustolle kirjautumiseen.

Sivun objektimalli

Kuten huomaat, me vain etsimme elementtejรค ja tรคytรคmme niille elementtejรค.

Tรคmรค on aikaa vievรค ja virhealtis skripti. Aluksi se vaikuttaa helpolta, mutta testipaketin laajentuessa elementtimuutosten hallinta vaikeutuu. Ajan myรถtรค testipaketti kuitenkin kasvaa. Kun lisรครคt koodiisi yhรค enemmรคn rivejรค, asiat vaikeutuvat.

Komentosarjojen yllรคpidon suurin ongelma on, ettรค jos 10 eri komentosarjaa kรคyttรครค samaa sivuelementtiรค, sinun on vaihdettava kaikki 10 komentosarjaa, jos elementtiรค muutetaan. Tรคmรค on aikaa vievรครค ja virhealtista.

Parempi lรคhestymistapa skriptien yllรคpitoon on luoda erillinen luokkatiedosto, joka etsii verkkoelementtejรค, tรคyttรครค ne tai tarkistaa ne. Tรคtรค luokkaa voidaan sitten kรคyttรครค uudelleen useissa testiskripteissรค, jotka ovat vuorovaikutuksessa saman elementin kanssa. Tulevaisuudessa, jos verkkoelementtiin tulee muutos, meidรคn on tehtรคvรค muutos vain yhteen luokkatiedostoon eikรค kymmeneen eri skriptiin.

Tรคtรค lรคhestymistapaa kutsutaan sivuobjektimalliksi SeleniumSe auttaa tekemรครคn koodista luettavampaa, yllรคpidettรคvรคmpรครค ja uudelleenkรคytettรคvรคmpรครค.

 Sivun objektimalli

๐Ÿ‘‰ Ilmoittaudu ilmaiseen live-lรคhetykseen Selenium projekti

POM:n edut

  1. Page Object Design Pattern sanoo, ettรค kรคyttรถliittymรคn toiminnot ja virrat tulee erottaa todentamisesta. Tรคmรค konsepti tekee koodistamme selkeรคmmรคn ja helposti ymmรคrrettรคvรคn.
  2. Toinen etu on, ettรค objektivarasto on riippumaton testitapauksista, joten voimme kรคyttรครค samaa objektivarastoa eri tarkoituksiin eri tyรถkaluilla. Voimme esimerkiksi integroida Page Object Modelin Selenium TestNG/JUnit toiminnallisille Testaus ja samaan aikaan JBehaven kanssa/Cucumber hyvรคksymistestausta varten.
  3. Code tulee vรคhemmรคn ja optimoiduksi, koska se kรคyttรครค uudelleen sivumetodeja POM-luokissa.
  4. Metodeille annetaan realistisempia nimiรค, jotka voidaan helposti yhdistรครค kรคyttรถliittymรคssรค tapahtuvaan toimintoon. Esimerkiksi jos painikkeen napsauttamisen jรคlkeen siirrytรครคn kotisivulle, metodin nimi on muotoa 'gotoHomePage()'.

POM:n toteuttaminen Selenium?

Yksinkertainen PLog Page Object Model -kehyksen perusrakenteessa, jossa whereManagerEIelementit AUT Ja nรคitรค verkkoelementtejรค kรคsittelevรคt metodit sรคilytetรครคn tukkotiedostossa. Tehtรคvรคn, kuten varmennuksen, tulisi olla erillinen osa testimetodeja.

Ota POM kรคyttรถรถn

Tรคydellinen esimerkki

Testitapaus: Mene Guru99 Demo-sivusto.

Vaihe 1) Siirry kohtaan Guru99 Demo-sivusto

Ota POM kรคyttรถรถn

Vaihe 2) Tarkista kotisivulla, ettรค teksti โ€Guru99 Bankโ€ on lรคsnรค

Ota POM kรคyttรถรถn

Vaihe 3) Kirjaudu sisรครคn sovellukseen

Ota POM kรคyttรถรถn

Vaihe 4) Varmista, ettรค kotisivulla on tekstiรค "Manger Id: demo"

Ota POM kรคyttรถรถn

Tรคssรค esimerkissรค kรคsittelemme kahta sivua:

  1. Kirjaudu Page
  2. Kotisivu (nรคkyy, kun kirjaudut sisรครคn)

Sen mukaisesti luomme 2 POM-in Selenium luokat

Guru99 Kirjautumissivu 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 Etusivu POM sisรครคn 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 Yksinkertainen POM sisรครคn Selenium Testitapaus

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

Mitรค Page Factory sisรคltรครค Selenium?

Sivun tehdas sisรครคn Selenium on sisรครคnrakennettu Page Object Model -kehyskonsepti Selenium WebDriver, joka parantaa yllรคpidettรคvyyttรค vรคhentรคmรคllรค toistuvia elementtihakuja merkintรถjen avulla, ei suoritusnopeuden avulla. Sitรค kรคytetรครคn sivuobjektien alustamiseen tai itse sivuobjektin luomiseen. Sitรค kรคytetรครคn myรถs sivuluokan elementtien alustamiseen ilman "FindElement/s"-metodia.

Tรคssรคkin noudatamme kรคsitettรค sivuobjektivaraston ja testimenetelmien erottamisesta. Lisรคksi luokan PageFactory in avulla Selenium, kรคytรคmme huomautuksia @FindBy lรถytรครคksesi WebElementin. Kรคytรคmme initElements-metodia web-elementtien alustamiseen.

Sivun tehdas Selenium

@FindBy voi hyvรคksyรค tagName, partialLinkText, name, linkText, id, css, className, xpath mรครคritteinรค.

Katsotaanpa samaa esimerkkiรค kuin yllรค kรคyttรคen Page Factory -ohjelmaa

Guru99 Kirjautumissivu Page Factorylla

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 Kotisivu Page Factorylla

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 ja Page Factory -konsepti

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

Tรคydellinen projektirakenne nรคyttรครค kaaviolta:

Sivun tehdas sisรครคn Selenium

AjaxElementLocatorFactory

AjaxElementLocatorFactory on PageFactory in laiska latauskonsepti SeleniumSitรค kรคytetรครคn verkkoelementtien lรถytรคmiseen vain silloin, kun elementtejรค kรคytetรครคn jossakin toiminnossa. Se mรครคrittรครค WebElements-elementeille aikakatkaisun objektisivuluokalle. Yksi PageFactory-kuvion kรคytรถn tรคrkeimmistรค eduista Selenium on AjaxElementLocatorFactory-luokka.

Tรคssรค, kun elementille suoritetaan toiminto, sen nรคkyvyyden odotus alkaa vasta kyseisestรค hetkestรค. Jos elementtiรค ei lรถydy annetussa aikavรคlissรค, Testitapaus suoritus aiheuttaa NoSuchElementException-poikkeuksen.

AjaxElement Locator -tehdas

Esimerkiksi:

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

Lataa Selenium Projektitiedostot esittelyรค varten tรคssรค opetusohjelmassa

UKK

Page Object Model on suunnittelumalli, joka abstracts jakaa verkkosivun elementit erillisiin luokkiin. Se yksinkertaistaa automaatiota erottamalla kรคyttรถliittymรคn vuorovaikutukset testilogiikasta, mikรค edistรครค selkeyttรค, skaalautuvuutta ja vรคhentรครค koodin pรครคllekkรคisyyttรค.

In SeleniumPOM edustaa kutakin verkkosivua erillisenรค luokkana, joka sisรคltรครค paikantimia ja toimintoja. Se kapseloi kรคyttรถliittymรคelementtejรค, jolloin testiskriptit pysyvรคt riippumattomina taustalla olevista sivurakenteen muutoksista.

POM ei ole itsenรคinen kehys, vaan suunnittelumalli. Se voidaan integroida mihin tahansa automaatiokehykseen testien tehokkaan jรคsentรคmisen varmistamiseksi, mikรค varmistaa paremman organisoinnin, uudelleenkรคytettรคvyyden ja yllรคpidettรคvyyden.

POM on suunnitteluperiaate, jossa jokainen verkkosivu mallinnetaan luokkana, jolla on mรครคritellyt paikantimet ja metodit. Se irrottaa testilogiikan kรคyttรถliittymรคelementeistรค, mikรค parantaa luettavuutta, skaalautuvuutta ja pitkรคaikaista yllรคpitoa.

POM mรครคrittelee sivun abs-suunnittelun rakenteentraction, kun taas Page Factory tarjoaa merkintรถjรค ja metodeja (@FindBy) verkkoelementtien tehokkaaseen alustamiseen. Page Factory on POM:n toteutuksen parannus.

POM keskittรครค elementtien paikantimet ja sivutoiminnot omiin luokkiinsa. Kaikki kรคyttรถliittymรคmuutokset vaativat pรคivityksiรค vain yhdessรค paikassa, mikรค minimoi uudelleentyรถn tarpeen, parantaa koodin uudelleenkรคyttรถรค ja nopeuttaa testien yllรคpitoa.

Kyllรค. Tekoรคlypohjaiset testigeneraattorit voivat luoda POM-luokkia automaattisesti analysoimalla kรคyttรถliittymรคhierarkioita, yllรคpitรคmรคllรค huolenaiheiden loogista erottelua ja samalla nopeuttamalla testien luomista alusta loppuun.

POM edistรครค modulaarisia ja uudelleenkรคytettรคviรค testikomponentteja, mikรค mahdollistaa integroinnin tekoรคlypohjaisiin testien yllรคpitotyรถkaluihin, jotka pรคivittรคvรคt paikantimet automaattisesti, mikรค vรคhentรครค skriptien haavoittuvuutta ja yllรคpitokustannuksia.

Tiivistรค tรคmรค viesti seuraavasti: