Mikä on sivun objektimalli?
Sivuobjektimalli (POM) on suunnittelumalli, jota käytetään yleisesti testausautomaatioon ja joka luo objektivaraston web-käyttöliittymän elementteille. Mallin etuna on, että se vähentää koodien päällekkäisyyttä ja parantaa testien ylläpitoa.
Tämän mallin mukaan jokaiselle sovelluksen verkkosivulle tulisi olla vastaava sivuluokka. Tämä sivuluokka tunnistaa kyseisen verkkosivun WebElementit ja sisältää myös Page -menetelmät, jotka suorittavat toimintoja näillä WebElementeilla. Näiden menetelmien nimi tulisi antaa niiden suorittaman tehtävän mukaan, ts. Jos lataaja odottaa maksuyhdyskäytävän ilmestymistä, POM-menetelmän nimi voi olla waitForPaymentScreenDisplay ().
Tässä opetusohjelmassa opit-
- Miksi sivuobjektimalli?
- POM: n edut
- Kuinka POM otetaan käyttöön?
- Mikä on sivutehdas?
- Guru99 TestCase sivutehdas-konseptilla
- AjaxElementLocatorFactory
Miksi sivuobjektimalli?
Käyttöliittymän automaation aloittaminen Selenium WebDriver -ohjelmassa EI ole vaikea tehtävä. Sinun tarvitsee vain löytää elementtejä, suorittaa sille toimintoja.
Harkitse tätä yksinkertaista komentosarjaa kirjautumalla verkkosivustolle
Kuten huomaat, kaikki, mitä teemme, on löytää elementtejä ja täyttää arvot niille.
Tämä on pieni käsikirjoitus. Komentosarjan ylläpito näyttää helpolta. Mutta ajan myötä testipaketti kasvaa. Kun lisäät yhä enemmän rivejä koodiin, asiat muuttuvat vaikeiksi.
Suurin ongelma komentosarjojen ylläpidossa on, että jos 10 erilaista komentosarjaa käyttää samaa sivuelementtiä, jos elementissä on muutoksia, sinun on vaihdettava kaikki 10 komentosarjaa. Tämä on aikaa vievää ja virhealtista.
Parempi lähestymistapa komentosarjojen ylläpitoon on luoda erillinen luokkatiedosto, joka löytää verkkoelementit, täyttää ne tai vahvistaa ne. Tätä luokkaa voidaan käyttää uudelleen kaikissa komentosarjoissa kyseisen elementin avulla. Jatkossa, jos verkkoelementissä tapahtuu muutoksia, meidän on tehtävä muutos vain yhdessä luokkatiedostossa eikä 10 eri komentosarjassa.
Tätä lähestymistapaa kutsutaan Seleniumissa Page Object Model. Se auttaa tekemään koodista luettavamman, ylläpidettävämmän ja uudelleenkäytettävämmän.
POM: n edut
- Sivun objektisuunnittelumallin mukaan käyttöliittymässä tehtävät toiminnot ja virrat tulisi erottaa todentamisesta. Tämä käsite tekee koodistamme puhtaamman ja helpommin ymmärrettävän.
- Toinen etu on, että objektivarasto on riippumaton testitapauksista, joten voimme käyttää samaa objektivarastoa eri tarkoitukseen eri työkaluilla. Voimme esimerkiksi integroida Seleenin sivuobjektimallin TestNG / JUnit-funktionaaliseen testaukseen ja samalla JBehave / Cucumber -ohjelmaan hyväksyntätestausta varten.
- Koodi vähenee ja optimoidaan POM-luokkien uudelleenkäytettävien sivumenetelmien takia.
- Menetelmät saavat realistisempia nimiä, jotka voidaan helposti kartoittaa käyttöliittymässä tapahtuvan toiminnan kanssa. ts. jos pudotamme painiketta napauttamalla aloitussivulle, menetelmän nimi on kuin 'gotoHomePage ()'.
Kuinka POM otetaan käyttöön?
Yksinkertainen POM:
Se on Sivu-objektimallikehyksen perusrakenne, jossa kaikki AUT: n Web-elementit ja näillä verkkoelementeillä toimiva menetelmä pidetään luokkatiedostossa.Varmistuksen kaltaisen tehtävän tulisi olla erillinen osana testausmenetelmiä.
Täydellinen esimerkki
TestCase : Siirry Guru99-demosivustolle.
Vaihe 1) Siirry Guru99-demosivustolle | |
Vaihe 2) kotisivu tarkistaa tekstin "Guru99 Bank" on läsnä | |
Vaihe 3) Kirjaudu sovellukseen | |
Vaihe 4) Varmista, että kotisivu sisältää tekstiä "Hallinnotunnus: esittely" |
Tässä on 2 sivua
- Sisäänkirjautumissivu
- Kotisivu (näkyy, kun kirjaudut sisään)
Näin ollen luomme 2 POM: ää seleeniluokissa
Guru99-kirjautumissivu POM
pakettisivut;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;julkinen luokka Guru99Login {WebDriver-ohjain;Käyttäjän99GuruName = By.name ("uid");Salasanalla99Guru = By.name ("salasana");By titleText = By.luokanimi ("barone");Sisäänkirjautumisen mukaan = By.name ("btnLogin");public Guru99Login (WebDriver-ohjain) {this.ajuri = kuljettaja;}// Aseta käyttäjänimi tekstiruutuunpublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Aseta salasana salasanan tekstiruutuunpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Napsauta kirjautumispainikettapublic void clickLogin () {driver.findElement (login). napsauta ();}// Hanki kirjautumissivun otsikkopublic String getLoginTitle () {return driver.findElement (titleText) .getText ();}/ *** Tämä POM-menetelmä altistetaan testitapauksessa kirjautumiselle sovellukseen* @param strUserName* @param strPasword* @paluu* /public void loginToGuru99 (String strUserName, String strPasword) {// Täytä käyttäjänimithis.setUserName (strUserName);// Täytä salasanathis.setPassword (strPasword);// Napsauta Kirjaudu-painikettathis.clickLogin ();}}
Guru99-kotisivun POM seleenissä
pakettisivut;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;julkinen luokka Guru99HomePage {WebDriver-ohjain;By homePageUserName = By.xpath ("// taulukko // tr [@ class = 'head3']");public Guru99HomePage (WebDriver-ohjain) {this.ajuri = kuljettaja;}// Hanki käyttäjänimi kotisivultapublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}
Guru99 Yksinkertainen POM seleenitestitapauksessa
paketti testi;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.Test;tuoda sivuja.Guru99HomePage;tuoda sivuja.Guru99Login;julkinen luokka Test99GuruLogin {Merkkijono driverPath = "C: \\ geckodriver.exe";WebDriver-ohjain;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tämä testitapaus kirjautuu sisään osoitteessa http://demo.guru99.com/V4/* Vahvista kirjautumissivun otsikko guru99-pankkina* Kirjaudu sovellukseen* Vahvista kotisivu Dashboard-viestillä* /@Test (prioriteetti = 0)public void test_Home_Page_Appear_Correct () {// Luo kirjautumissivu -objektiobjLogin = uusi Guru99Login (ohjain);// Vahvista kirjautumissivun otsikkoMerkkijono loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sisältää ("guru99 pankki"));// kirjaudu sovellukseenobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// siirry seuraavalle sivulleobjHomePage = uusi Guru99HomePage (ohjain);// Vahvista kotisivuAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sisältää ("seimen tunnus: mgr123"));}
Mikä on sivutehdas seleenissä?
Seleniumin sivutehdas on sisäänrakennettu Page Object Model -kehyskonsepti Selenium WebDriverille, mutta se on hyvin optimoitu. Sitä käytetään sivuobjektien alustamiseen tai itse sivuobjektin ilmentämiseen. Sitä käytetään myös sivuluokan elementtien alustamiseen käyttämättä "FindElement / s".
Tässäkin noudatamme sivuobjektivaraston ja testimenetelmien erottamisen käsitettä. Lisäksi Selenium-luokan PageFactory-luokan avulla löydämme merkinnät @FindBy löytääksesi WebElementin. Verkkoelementtien alustamiseen käytämme initElements-menetelmää
@FindBy voi hyväksyä attribuutteina tagName, particLinkText, name, linkText, id, css, className, xpath .
Tarkastellaan samaa esimerkkiä kuin yllä käyttämällä sivutehdasta
Guru99-kirjautumissivu Page Factory -palvelun kanssa
paketti PageFactory;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.support.FindBy;tuo org.openqa.selenium.support.PageFactory;julkinen luokka Guru99Login {/ *** Kaikki WebElementit tunnistetaan @FindBy -merkinnällä* /WebDriver-ohjain;@FindBy (name = "uid")WebElement-käyttäjä99GuruName;@FindBy (nimi = "salasana")WebElement-salasana99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (nimi = "btnLogin")WebElement-kirjautuminen;public Guru99Login (WebDriver-ohjain) {this.ajuri = kuljettaja;// Tämä initElements-menetelmä luo kaikki WebElementitPageFactory.initElements (ohjain, tämä);}// Aseta käyttäjänimi tekstiruutuunpublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Aseta salasana salasanan tekstiruutuunpublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}// Napsauta kirjautumispainikettapublic void clickLogin () {login.click ();}// Hanki kirjautumissivun otsikkopublic String getLoginTitle () {return titleText.getText ();}/ *** Tämä POM-menetelmä altistetaan testitapauksessa kirjautumiselle sovellukseen* @param strUserName* @param strPasword* @paluu* /public void loginToGuru99 (String strUserName, String strPasword) {// Täytä käyttäjänimithis.setUserName (strUserName);// Täytä salasanathis.setPassword (strPasword);// Napsauta Kirjaudu-painikettathis.clickLogin ();}}
Guru99-kotisivu sivutehtaalla
paketti PageFactory;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.support.FindBy;tuo org.openqa.selenium.support.PageFactory;julkinen luokka Guru99HomePage {WebDriver-ohjain;@FindBy (xpath = "// taulukko // tr [@ class = 'head3']")WebElement homePageUserName;public Guru99HomePage (WebDriver-ohjain) {this.ajuri = kuljettaja;// Tämä initElements-menetelmä luo kaikki WebElementitPageFactory.initElements (ohjain, tämä);}// Hanki käyttäjänimi kotisivultapublic String getHomePageDashboardUserName () {palaa homePageUserName.getText ();}}
Guru99 TestCase sivutehdas-konseptilla
paketti testi;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.Test;tuo PageFactory.Guru99HomePage;tuo PageFactory.Guru99Login;julkinen luokka Test99GuruLoginWithPageFactory {Merkkijono driverPath = "C: \\ geckodriver.exe";WebDriver-ohjain;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Tämä testi on osoitteessa http://demo.guru99.com/V4/* Vahvista kirjautumissivun otsikko guru99-pankkina* Kirjaudu sovellukseen* Vahvista kotisivu Dashboard-viestillä* /@Test (prioriteetti = 0)public void test_Home_Page_Appear_Correct () {// Luo kirjautumissivu -objektiobjLogin = uusi Guru99Login (ohjain);// Vahvista kirjautumissivun otsikkoMerkkijono loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Sisältää ("guru99 pankki"));// kirjaudu sovellukseenobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// siirry seuraavalle sivulleobjHomePage = uusi Guru99HomePage (ohjain);// Vahvista kotisivuAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Sisältää ("seimen tunnus: mgr123"));}}
Täydellinen projektirakenne näyttää kaavalta:
AjaxElementLocatorFactory
AjaxElementLocatorFactory on laiska latauskonsepti PageFactorysta Seleniumissa. Sitä käytetään verkkoelementtien löytämiseen vain, kun elementtejä käytetään missä tahansa toiminnossa. Se määrittää WebElements-aikakatkaisun objektisivuluokalle. Yksi tärkeimmistä eduista käyttäessäsi PageFactory -mallia seleenissä on AjaxElementLocatorFactory-luokka.
Kun elementille suoritetaan operaatio, sen näkyvyyden odotus alkaa vain siitä hetkestä. Jos elementtiä ei löydy annetusta aikavälistä, Testitapauksen suoritus aiheuttaa NoSuchElementException-poikkeuksen.
Yhteenveto
- Selenium Websdriver -sivun objektimalli on Object Repository -malli.
- Seleenisivumallimalli luo testauskoodimme ylläpidettäväksi, uudelleenkäytettäväksi.
- Page Factory on optimoitu tapa luoda objektivarasto Page Object Model -kehyskonseptissa.
- AjaxElementLocatorFactory on laiska latauskonsepti Page Factory - sivun objektisuunnittelumallissa, joka tunnistaa WebElementit vain, kun niitä käytetään missä tahansa toiminnossa.
Lataa Selenium-projektitiedostot esittelyyn tästä opetusohjelmasta