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.

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.
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.
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.
👉 Registreeru tasuta otseülekande saamiseks Selenium Projekt
POM-i eelised
- Leheobjekti kujundusmuster ütleb, et kasutajaliidese toimingud ja vood tuleks kinnitamisest eraldada. See kontseptsioon muudab meie koodi puhtamaks ja hõlpsasti mõistetavaks.
- 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.
- Code muutub väiksemaks ja optimeerituks, kuna see taaskasutab POM-klassides lehemeetodeid.
- 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.
Täielik näide
TestCase: Minna Guru99 demosait.
Samm 1) Minge aadressile Guru99 demosait
2. samm) Kontrollige avalehel, kas tekst „Guru99 Bank” on kohal
Samm 3) Logige rakendusse sisse
Samm 4) Veenduge, et avalehel oleks tekst „halduri ID: demo”
Selles näites on meil tegemist kahe lehega:
- Sisselogimise lehele
- 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.
@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:
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”.
Näiteks:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);
Lae alla Selenium Selle õpetuse demo projektifailid











