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.

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.
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.
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ää.
👉 Ilmoittaudu ilmaiseen live-lähetykseen Selenium projekti
POM:n edut
- 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.
- 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.
- Koodi vähenee ja optimoituu, koska se käyttää uudelleen sivumetodeja POM-luokissa.
- 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.
Täydellinen esimerkki
Testitapaus: Siirry Guru99-demosivustolle.
Vaihe 1) Siirry Guru99-demosivustolle
Vaihe 2) Tarkista kotisivulla, että teksti ”Guru99 Bank” on läsnä.
Vaihe 3) Kirjaudu sisään sovellukseen
Vaihe 4) Varmista, että kotisivulla on tekstiä "Manger Id: demo"
Tässä esimerkissä käsittelemme kahta sivua:
- Kirjaudu Page
- 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 kotisivu 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 Simple 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.
@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 sivutehtaalla
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 -konseptilla
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:
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.
Esimerkiksi:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);
Lataa Selenium Projektitiedostot esittelyä varten tässä opetusohjelmassa











