Stránka Object Model (POM) & Výukový program Page Factory in Selenium

Obsah:

Anonim

Co je model objektu stránky?

Page Object Model (POM) je návrhový vzor, ​​běžně používaný v automatizaci testů, který vytváří objektové úložiště pro prvky webového uživatelského rozhraní. Výhodou modelu je, že snižuje duplikaci kódu a zlepšuje údržbu testů.

V rámci tohoto modelu by pro každou webovou stránku v aplikaci měla existovat odpovídající Třída stránky. Tato třída Page bude identifikovat WebElements této webové stránky a také obsahuje Page metody, které provádějí operace s těmito WebElements. Název těchto metod by měl být uveden podle úkolu, který provádějí, tj. Pokud zavaděč čeká na zobrazení platební brány, název metody POM může být waitForPaymentScreenDisplay ().

V tomto výukovém programu se naučíte

  • Proč stránkový objektový model?
  • Výhody POM
  • Jak implementovat POM?
  • Co je Page Factory?
  • Guru99 TestCase s konceptem Page Factory
  • AjaxElementLocatorFactory

Proč stránkový objektový model?

Spuštění automatizace uživatelského rozhraní v selenu WebDriver NENÍ náročný úkol. Musíte jen najít prvky a provádět na nich operace.

Zvažte tento jednoduchý skript pro přihlášení na web

Jak můžete vidět, vše, co děláme, je hledání prvků a vyplňování hodnot pro tyto prvky.

Toto je malý skript. Údržba skriptů vypadá snadno. Ale s časovým testovacím balíčkem poroste. Jak do svého kódu přidáváte další a další řádky, věci se zhoršují.

Hlavní problém s údržbou skriptů spočívá v tom, že pokud stejný prvek stránky používá 10 různých skriptů, při jakékoli změně tohoto prvku musíte změnit všech 10 skriptů. To je časově náročné a náchylné k chybám.

Lepším přístupem k údržbě skriptů je vytvoření samostatného souboru třídy, který by vyhledával webové prvky, vyplňoval je nebo ověřoval. Tuto třídu lze znovu použít ve všech skriptech pomocí tohoto prvku. V budoucnu, pokud dojde ke změně webového prvku, musíme provést změnu pouze v 1 souboru třídy a ne v 10 různých skriptech.

Tento přístup se nazývá Page Object Model in Selenium. Pomáhá zajistit, aby byl kód čitelnější, udržovatelnější a znovu použitelný.

Výhody POM

  1. Page Object Design Pattern říká, že operace a toky v uživatelském rozhraní by měly být odděleny od ověření. Díky tomuto konceptu je náš kód čistší a srozumitelnější.
  2. Druhou výhodou je, že úložiště objektů je nezávislé na testovacích případech, takže můžeme použít stejné úložiště objektů pro různé účely s různými nástroji. Například můžeme integrovat Page Object Model v Selenium s TestNG / JUnit pro funkční testování a současně s JBehave / Cucumber pro akceptační testování.
  3. Kód se zmenší a optimalizuje kvůli opakovaně použitelným metodám stránek ve třídách POM.
  4. Metody získají realističtější názvy, které lze snadno mapovat s operací probíhající v uživatelském rozhraní. tj. pokud po kliknutí na tlačítko přistaneme na domovské stránce, bude název metody vypadat jako 'gotoHomePage ()'.

Jak implementovat POM?

Jednoduchý POM:

Je to základní struktura rámce modelu objektu Page, kde jsou všechny webové prvky AUT a metoda, které na těchto webových prvcích fungují, udržovány uvnitř souboru třídy. Úkol jako ověření by měl být v rámci testovacích metod samostatný.

Kompletní příklad

TestCase: Přejít na ukázkovou stránku Guru99.

Krok 1) Přejděte na ukázkovou stránku Guru99
Krok 2) Na domovské stránce je uveden text „Guru99 Bank“
Krok 3) Přihlaste se do aplikace
Krok 4) Ověřte, zda domovská stránka obsahuje text jako „ID správce: ukázka“

Tady máme co do činění se 2 stránkami

  1. Přihlašovací stránka
  2. Domovská stránka (zobrazí se po přihlášení)

V souladu s tím vytvoříme 2 POM ve třídách selenu

Přihlašovací stránka Guru99 POM

stránky balíčku;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;veřejná třída Guru99Login {Ovladač WebDriver;Autor user99GuruName = By.name ("uid");Vytvořil password99Guru = By.name ("heslo");By titleText = By.className ("barone");Přihlašováním = By.name ("btnLogin");public Guru99Login (ovladač WebDriver) {this.driver = driver;}// Nastaví uživatelské jméno do textového polepublic void setUserName (řetězec strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Nastavit heslo do textového pole pro heslopublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Klikněte na přihlašovací tlačítkopublic void clickLogin () {driver.findElement (login) .click ();}// Získejte název přihlašovací stránkypublic String getLoginTitle () {vrátit driver.findElement (titleText) .getText ();}/ *** Tato metoda POM bude vystavena v testovacím případě pro přihlášení do aplikace* @param strUserName* @param strPasword* @vrátit se* /public void loginToGuru99 (String strUserName, String strPasword) {// Vyplňte uživatelské jménothis.setUserName (strUserName);// Vyplňte heslothis.setPassword (strPasword);// Klikněte na tlačítko Přihlášeníthis.clickLogin ();}}

Domovská stránka Guru99 POM v selenu

stránky balíčku;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;veřejná třída Guru99HomePage {Ovladač WebDriver;By homePageUserName = By.xpath ("// tabulka // tr [@ class = 'titulek3']");public Guru99HomePage (ovladač WebDriver) {this.driver = driver;}// Získejte uživatelské jméno z domovské stránkypublic String getHomePageDashboardUserName () {vrátit driver.findElement (homePageUserName) .getText ();}}

Guru99 Simple POM v testovacím případě selenu

test balení;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 stránek.Guru99HomePage;import stránek.Guru99Login;veřejná třída Test99GuruLogin {Řetězec driverPath = "C: \\ geckodriver.exe";Ovladač WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tento testovací případ se přihlásí na adrese http://demo.guru99.com/V4/* Ověřte název přihlašovací stránky jako guru99 bank* Přihlaste se do aplikace* Ověřte domovskou stránku pomocí zprávy na řídicím panelu* /@Test (priorita = 0)public void test_Home_Page_Appear_Correct () {// Vytvořit objekt přihlašovací stránkyobjLogin = nový Guru99Login (ovladač);// Ověření názvu přihlašovací stránkyŘetězec loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Obsahuje ("banka guru99"));// přihlášení do aplikaceobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// přejít na další stránkuobjHomePage = nový Guru99HomePage (ovladač);// Ověření domovské stránkyAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("manger id: mgr123"));}

Co je Page Factory v selenu?

Page Factory v Selenium je vestavěný koncept rámce Page Object Model pro Selenium WebDriver, ale je velmi optimalizovaný. Používá se k inicializaci objektů Page nebo k vytvoření instance objektu Page samotného. Používá se také k inicializaci prvků třídy Page bez použití "FindElement / s."

I zde se řídíme konceptem oddělení úložiště objektů stránky a testovacích metod. Navíc pomocí třídy PageFactory v Selenium používáme anotace @FindBy k nalezení WebElement. K inicializaci webových prvků používáme metodu initElements

@FindBy může jako atributy přijímat tagName, partialLinkText, name, linkText, id, css, className, xpath .

Podívejme se na stejný příklad jako výše pomocí Page Factory

Přihlašovací stránka Guru99 s aplikací Page Factory

balíček PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importovat org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;veřejná třída Guru99Login {/ *** Všechny prvky WebElements jsou označeny anotací @FindBy* /Ovladač WebDriver;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (name = "heslo")Heslo WebElement99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")WebElement přihlášení;public Guru99Login (ovladač WebDriver) {this.driver = driver;// Tato metoda initElements vytvoří všechny WebElementsPageFactory.initElements (ovladač, toto);}// Nastaví uživatelské jméno do textového polepublic void setUserName (řetězec strUserName) {user99GuruName.sendKeys (strUserName);}// Nastavit heslo do textového pole pro heslopublic void setPassword (String strPassword) {heslo99Guru.sendKeys (strPassword);}// Klikněte na přihlašovací tlačítkopublic void clickLogin () {login.click ();}// Získejte název přihlašovací stránkypublic String getLoginTitle () {návrat titleText.getText ();}/ *** Tato metoda POM bude vystavena v testovacím případě pro přihlášení do aplikace* @param strUserName* @param strPasword* @vrátit se* /public void loginToGuru99 (String strUserName, String strPasword) {// Vyplňte uživatelské jménothis.setUserName (strUserName);// Vyplňte heslothis.setPassword (strPasword);// Klikněte na tlačítko Přihlášeníthis.clickLogin ();}}

Domovská stránka Guru99 se stránkou Factory

balíček PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importovat org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;veřejná třída Guru99HomePage {Ovladač WebDriver;@FindBy (xpath = "// tabulka // tr [@ class = 'hlavička3']")WebElement homePageUserName;public Guru99HomePage (ovladač WebDriver) {this.driver = driver;// Tato metoda initElements vytvoří všechny WebElementsPageFactory.initElements (ovladač, toto);}// Získejte uživatelské jméno z domovské stránkypublic String getHomePageDashboardUserName () {vrátit homePageUserName.getText ();}}

Guru99 TestCase s konceptem Page Factory

test balení;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;veřejná třída Test99GuruLoginWithPageFactory {Řetězec driverPath = "C: \\ geckodriver.exe";Ovladač WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tento test najdete na adrese http://demo.guru99.com/V4/* Ověřte název přihlašovací stránky jako guru99 bank* Přihlaste se do aplikace* Ověřte domovskou stránku pomocí zprávy na řídicím panelu* /@Test (priorita = 0)public void test_Home_Page_Appear_Correct () {// Vytvořit objekt přihlašovací stránkyobjLogin = nový Guru99Login (ovladač);// Ověření názvu přihlašovací stránkyŘetězec loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Obsahuje ("banka guru99"));// přihlášení do aplikaceobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// přejít na další stránkuobjHomePage = nový Guru99HomePage (ovladač);// Ověření domovské stránkyAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Contains ("manger id: mgr123"));}}

Kompletní struktura projektu bude vypadat jako diagram:

AjaxElementLocatorFactory

AjaxElementLocatorFactory je líný koncept načítání PageFactory v selenu. Používá se k vyhledání webových prvků, pouze když jsou prvky použity v jakékoli operaci. Přiřadí časový limit pro WebElements třídě stránky objektu. Jednou z klíčových výhod používání vzoru PageFactory v selenu je AjaxElementLocatorFactory Class.

Zde, když se operace provádí na prvku, čekání na jeho viditelnost začíná pouze od tohoto okamžiku. Pokud prvek v daném časovém intervalu nebyl nalezen, vyvolá spuštění testovacího případu výjimku NoSuchElementException.

souhrn

  1. Page Object Model in Selenium Websdriver is a Object Repository design pattern.
  2. Selenový objektový model stránky vytváří náš testovací kód udržovatelný, opakovaně použitelný.
  3. Page Factory je optimalizovaný způsob, jak vytvořit úložiště objektů v koncepčním rámci Page Object Model Model.
  4. AjaxElementLocatorFactory je koncept líného načtení ve Page Factory - návrhový vzor objektu stránky k identifikaci WebElements pouze v případě, že jsou použity v jakékoli operaci.

Stáhněte si soubory projektu Selenium pro ukázku v tomto výukovém programu