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.

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.
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.
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.
👉 Regisztrálj ingyenes élő közvetítésre Selenium NetPoulSafe projekt
A POM előnyei
- 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.
- 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.
- Code kevesebb és optimalizáltabb lesz, mivel újrafelhasználja az oldalmetódusokat a POM osztályokban.
- 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.
Teljes példa
Próbaper: Tovább Guru99 Demó oldal.
1. lépés) Lépjen ide Guru99 Demóoldal
2. lépés) A kezdőlapon ellenőrizze, hogy a „Guru99 Bank” jelen van
3. lépés) Jelentkezzen be az alkalmazásba
4. lépés: Győződjön meg arról, hogy a kezdőlapon „Manger Id: demo” szöveg szerepel-e
Ebben a példában két oldallal foglalkozunk:
- Bejelentkezés oldal
- 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.
@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:
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.
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











