Mis on lehe objekti mudel?
Lehe objektimudel (POM) on testimisautomaatikas levinud kujundusmuster, mis loob veebiliidese objektide hoidla. Mudeli eeliseks on see, et see vähendab koodi dubleerimist ja parandab testide hooldust.
Selle mudeli kohaselt peaks rakenduse iga veebilehe jaoks olema vastav leheklass. See lehtklass tuvastab selle veebisaidi veebielemendid ja sisaldab ka lehemeetodeid, mis toimivad nendes veebielementides. Nende meetodite nimi tuleks anda vastavalt nende täidetavale ülesandele, st kui laadur ootab makselüüsi ilmumist, võib POM-i meetodi nimi olla waitForPaymentScreenDisplay ().
Selles õpetuses saate teada
- Miks lehe objekti mudel?
- POM-i eelised
- Kuidas POM-i rakendada?
- Mis on lehevabrik?
- Guru99 TestCase koos lehevabriku kontseptsiooniga
- AjaxElementLocatorFactory
Miks lehe objekti mudel?
Kasutajaliidese automatiseerimise käivitamine Seleeni WebDriveris EI OLE keeruline ülesanne. Peate lihtsalt leidma elemendid, tegema sellega toiminguid.
Mõelge sellele lihtsale skriptile veebisaidile sisselogimiseks
Nagu näete, on kõik, mida me teeme, elementide leidmine ja nende elementide väärtuste leidmine.
See on väike stsenaarium. Skripti hooldus tundub lihtne. Kuid aja jooksul testipakett kasvab. Kui lisate koodile üha uusi ridu, muutuvad asjad karmiks.
Skripti hoolduse peamine probleem on see, et kui sama leheelementi kasutab 10 erinevat skripti, peate selle elemendi muudatustega muutma kõiki 10 skripti. See on aeganõudev ja veaohtlik.
Parem lähenemine skripti hooldusele on luua eraldi klassifail, mis leiaks veebielemendid, täidaks need või kontrolliks neid. Seda klassi saab selle elemendi abil kõikides skriptides uuesti kasutada. Tulevikus, kui veebielemendis on muudatusi, peame muudatused tegema ainult 1 klassi failis, mitte 10 erinevas skriptis.
Seda lähenemist nimetatakse seleenis lehe objektimudeliks. See aitab muuta koodi loetavamaks, hooldatavamaks ja korduvkasutatavamaks.
POM-i eelised
- Lehe objekti kujunduse mustri järgi tuleks kasutajaliidese toimingud ja voogud verifitseerimisest eraldada. See kontseptsioon muudab meie koodi puhtamaks ja hõlpsasti mõistetavaks.
- Teine eelis on see, et objektihoidla ei sõltu testimisjuhtumitest, nii et saame kasutada sama objektihoidlat erinevate tööriistade abil erinevatel eesmärkidel. Näiteks saame funktsionaalseks testimiseks integreerida leheobjekti mudeli seleenis koos TestNG / JUnitiga ja aktsepteerimistestimiseks samal ajal ka JBehave / Cucumberiga.
- Kood muutub vähemaks ja optimeeritumaks POM-klasside korduvkasutatavate lehemeetodite tõttu.
- Meetodid saavad realistlikumad nimed, mida saab hõlpsasti kaardistada kasutajaliideses toimuva toiminguga. st kui pärast nupul klõpsamist jõuame avalehele, on meetodi nimi sarnane 'gotoHomePage ()'.
Kuidas POM-i rakendada?
Lihtne POM:
See on lehe objektimudeli raamistiku põhistruktuur, kus kõiki AUT-i veebielemente ja nendel veebielementidel töötavat meetodit hoitakse klassifailis. Testimismeetodite osana peaks olema selline ülesanne nagu kontrollimine.
Täielik näide
TestCase : minge Guru99 demosaidile.
Samm 1) Minge Guru99 demosaidile | |
Etapp 2) kodulehekülg kontroll teksti "Guru99 Bank" esineb | |
Samm 3) Logige rakendusse sisse | |
Samm 4) Veenduge, et avaleht sisaldab teksti "Halduri ID: demo" |
Siin on meil 2 lehte
- Sisselogimisleht
- Avaleht (kuvatakse pärast sisselogimist)
Vastavalt sellele loome seleeni klassides 2 POM-i
Guru99 sisselogimisleht POM
pakettlehed;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;avalik klass Guru99Login {WebDriveri draiver;Kasutaja poolt99GuruName = By.name ("uid");Parooli järgi99Guru = By.name ("parool");By titleText = Autor.klassinimi ("barone");Sisselogimise järgi = By.name ("btnLogin");public Guru99Login (WebDriveri draiver) {see.juht = draiver;}// Määra kasutajanimi tekstikastipublic void setUserName (string strUserName) {draiver.findElement (kasutaja99GuruNimi) .sendKeys (strUserName);}// Määra parool tekstikastipublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Klõpsake sisselogimisnuppupublic void clickLogin () {juht.findElement (sisselogimine) .klõps ();}// Hankige sisselogimislehe pealkiripublic String getLoginTitle () {tagastage draiver.findElement (titleText) .getText ();}/ *** Seda POM-meetodit testitakse juhul, kui rakendusse sisse logitakse* @param strUserName* @param strPasword* @return* /public void loginToGuru99 (string strUserName, String strPasword) {// Täida kasutajanimithis.setUserName (strUserName);// Täida paroolthis.setPassword (strPasword);// Klõpsake nuppu Logi sissethis.clickLogin ();}}
Guru99 avaleht POM seleenis
pakettlehed;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;avalik klass Guru99HomePage {WebDriveri draiver;By homePageUserName = By.xpath ("// tabel // tr [@ class = 'pealkiri3']");public Guru99HomePage (WebDriveri draiver) {see.juht = draiver;}// Hankige kasutajanimi avaleheltpublic String getHomePageDashboardUserName () {tagastage draiver.findElement (homePageUserName) .getText ();}}
Guru99 Lihtne POM seleeni testi puhul
pakendi 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;lehtede importimine.Guru99HomePage;lehtede importimine.Guru99Login;avalik klass Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";WebDriveri draiver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** See testjuhtum logitakse sisse aadressil http://demo.guru99.com/V4/* Kontrollige sisselogimislehe pealkirja guru99 pangana* Logige rakendusse sisse* Kontrollige avalehte, kasutades juhtpaneeli teadet* /@Test (prioriteet = 0)public void test_Home_Page_Appear_Correct () {// Looge sisselogimislehe objektobjLogin = uus Guru99Login (draiver);// Kontrollige sisselogimislehe pealkirjaString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sisaldab ("guru99 pank"));// logige rakendusse sisseobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// mine järgmisele leheleobjHomePage = uus Guru99HomePage (draiver);// Kontrollige avalehteAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sisaldab ("sõime ID: mgr123"));}
Mis on seleenis lehttehas?
Page Factory in Selenium on sisseehitatud Page Object Model raamistiku seleen WebDriver, kuid see on väga optimeeritud. Seda kasutatakse leheküljeobjektide initsialiseerimiseks või leheobjekti enda kiirendamiseks. Seda kasutatakse ka leheküljeklassi elementide initsialiseerimiseks ilma funktsiooni "FindElement / s" kasutamata.
Ka siin järgime lehe objektide hoidla ja testimismeetodite eraldamise kontseptsiooni. Lisaks abiga klassi PageFactory seleeni, me kasutame märkimised @FindBy leida WebElement. Veebielementide initsialiseerimiseks kasutame initElements meetodit
@FindBy võib atribuutidena aktsepteerida tagName, particLinkText, name, linkText, id, css, className, xpath .
Vaatame lehekülje tehase abil sama näidet nagu eespool
Guru99 sisselogimisleht koos lehevabrikuga
pakett PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;avalik klass Guru99Login {/ *** Kõik veebielemendid tuvastatakse märkuse @FindBy abil* /WebDriveri draiver;@FindBy (nimi = "uid")WebElementi kasutaja99GuruName;@FindBy (nimi = "parool")WebElementi parool99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (nimi = "btnLogin")WebElementi sisselogimine;public Guru99Login (WebDriveri draiver) {see.juht = draiver;// See initElements meetod loob kõik WebElementidPageFactory.initElements (draiver, see);}// Määra kasutajanimi tekstikastipublic void setUserName (string strUserName) {kasutaja99GuruNimi.sendKeys (strUserName);}// Määra parool tekstikastipublic void setPassword (String strPassword) {parool99Guru.sendKeys (strPassword);}// Klõpsake sisselogimisnuppupublic void clickLogin () {login.click ();}// Hankige sisselogimislehe pealkiripublic String getLoginTitle () {tagastage titleText.getText ();}/ *** Seda POM-meetodit testitakse juhul, kui rakendusse sisse logitakse* @param strUserName* @param strPasword* @return* /public void loginToGuru99 (string strUserName, String strPasword) {// Täida kasutajanimithis.setUserName (strUserName);// Täida paroolthis.setPassword (strPasword);// Klõpsake nuppu Logi sissethis.clickLogin ();}}
Guru99 avaleht koos lehevabrikuga
pakett PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;avalik klass Guru99HomePage {WebDriveri draiver;@FindBy (xpath = "// tabel // tr [@ class = 'head3']")WebElement homePageUserName;public Guru99HomePage (WebDriveri draiver) {see.juht = draiver;// See initElements meetod loob kõik WebElementidPageFactory.initElements (draiver, see);}// Hankige kasutajanimi avaleheltpublic String getHomePageDashboardUserName () {return homePageUserName.getText ();}}
Guru99 TestCase koos lehevabriku kontseptsiooniga
pakendi 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;importige PageFactory.Guru99HomePage;importige PageFactory.Guru99Login;avalik klass Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";WebDriveri draiver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** See test läheb aadressile http://demo.guru99.com/V4/* Kontrollige sisselogimislehe pealkirja guru99 pangana* Logige rakendusse sisse* Kontrollige avalehte, kasutades juhtpaneeli teadet* /@Test (prioriteet = 0)public void test_Home_Page_Appear_Correct () {// Looge sisselogimislehe objektobjLogin = uus Guru99Login (draiver);// Kontrollige sisselogimislehe pealkirjaString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sisaldab ("guru99 pank"));// logige rakendusse sisseobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// mine järgmisele leheleobjHomePage = uus Guru99HomePage (draiver);// Kontrollige avalehteAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sisaldab ("sõime ID: mgr123"));}}
Projekti täielik struktuur näeb välja nagu diagramm:
AjaxElementLocatorFactory
AjaxElementLocatorFactory on seleenis PageFactory laisk laadimiskontseptsioon. Seda kasutatakse veebielementide leidmiseks ainult siis, kui elemente kasutatakse mis tahes toimingus. See määrab WebElementsi ajalõpu objektilehe klassile. Mustri PageFactory seleenis kasutamise üks peamisi eeliseid on AjaxElementLocatorFactory klass.
Kui elemendil tehakse toiming, algab selle nähtavuse ootamine ainult sellest hetkest. Kui elementi antud ajaintervallist ei leia, viskab testjuhtumi käivitamine erandi 'NoSuchElementException'.
Kokkuvõte
- Lehe objektimudel seleeniveebidraiveris on objekti hoidla kujundusmuster.
- Seleeni lehe objektimudel loob meie testimiskoodi hooldatavaks, korduvkasutatavaks.
- Page Factory on optimeeritud viis objektihoidla loomiseks Page Object Model raamistiku kontseptsioonis.
- AjaxElementLocatorFactory on Page Factory'i lehe objekti kujundusmustris laisk laadimiskontseptsioon, et tuvastada WebElementid ainult siis, kui neid kasutatakse mis tahes toimingus.
Laadige selles õpetuses alla Seleeni projektifailid demo jaoks