Sivun kohteen malli ja tehdas Selenium
โก รlykรคs yhteenveto
Sivuobjektimalli ja sivutehdas Selenium mรครคrittelee strukturoidun suunnittelumallin vankkojen ja yllรคpidettรคvien testiautomaatiokehysten rakentamiseksi. Se korostaa sivukohtaisten luokkien luomista, jotka kapseloivat WebElements-elementit ja niiden toiminnan, mikรค vรคhentรครค pรครคllekkรคisyyksiรค ja parantaa luettavuutta ja skaalautuvuutta. Selenium testiskriptit.

Mikรค on Page Object Model? Mitkรค ovat sen keskeiset osat?
Sivun objektimalli (POM) on testiautomaatiossa yleisesti kรคytetty suunnittelumalli, joka luo objektisรคilรถn verkkokรคyttรถliittymรคn elementeille. Mallin etuna on, ettรค se vรคhentรครค koodin pรครคllekkรคisyyttรค ja parantaa testien yllรคpitoa.
Tรคssรค mallissa jokaiselle sovelluksen verkkosivulle tulisi olla vastaava sivuluokka. Tรคmรค sivuluokka tunnistaa kyseisen verkkosivun web-elementit (WebElements) ja sisรคltรครค myรถs sivumetodeja (Page Methods), jotka suorittavat toimintoja nรคille web-elementeille. Nรคiden metodien nimet tulisi antaa niiden suorittaman tehtรคvรคn mukaan, eli jos lataaja odottaa maksuyhdyskรคytรคvรคn ilmestymistรค, POM-metodin nimi voi olla waitForPaymentScreenDisplay().
Sivuobjektimallin keskeiset komponentit
- Sivuluokat: Esittele jokainen verkkosivu erillisenรค luokkana.
- Paikannin: Tunnista verkkoelementit tunnisteiden, XPath-lausekkeiden tai CSS-valitsimien avulla.
- Menetelmรคt: Sisรคltรครค .page-elementeille suoritettavia toimintoja tai toimintoja.
- Uudelleenkรคytettรคvyys: Promotestikoodin uudelleenkรคyttรถ ja helpompi yllรคpito eri testien vรคlillรค.
- Huolien erottelu: Pitรครค sivurakenteen erillรครคn testilogiikasta paremman organisoinnin takaamiseksi.
Miksi sivuobjektimalli?
Kรคyttรถliittymรคautomaation aloittaminen Selenium web-ajuri ei ole vaikea tehtรคvรค. Sinun tarvitsee vain lรถytรครค elementtejรค ja suorittaa niille laskutoimituksia.
Harkitse tรคtรค yksinkertaista skriptiรค verkkosivustolle kirjautumiseen.
Kuten huomaat, me vain etsimme elementtejรค ja tรคytรคmme niille elementtejรค.
Tรคmรค on aikaa vievรค ja virhealtis skripti. Aluksi se vaikuttaa helpolta, mutta testipaketin laajentuessa elementtimuutosten hallinta vaikeutuu. Ajan myรถtรค testipaketti kuitenkin kasvaa. Kun lisรครคt koodiisi yhรค enemmรคn rivejรค, asiat vaikeutuvat.
Komentosarjojen yllรคpidon suurin ongelma on, ettรค jos 10 eri komentosarjaa kรคyttรครค samaa sivuelementtiรค, sinun on vaihdettava kaikki 10 komentosarjaa, jos elementtiรค muutetaan. Tรคmรค on aikaa vievรครค ja virhealtista.
Parempi lรคhestymistapa skriptien yllรคpitoon on luoda erillinen luokkatiedosto, joka etsii verkkoelementtejรค, tรคyttรครค ne tai tarkistaa ne. Tรคtรค luokkaa voidaan sitten kรคyttรครค uudelleen useissa testiskripteissรค, jotka ovat vuorovaikutuksessa saman elementin kanssa. Tulevaisuudessa, jos verkkoelementtiin tulee muutos, meidรคn on tehtรคvรค muutos vain yhteen luokkatiedostoon eikรค kymmeneen eri skriptiin.
Tรคtรค lรคhestymistapaa kutsutaan sivuobjektimalliksi SeleniumSe auttaa tekemรครคn koodista luettavampaa, yllรคpidettรคvรคmpรครค ja uudelleenkรคytettรคvรคmpรครค.
๐ Ilmoittaudu ilmaiseen live-lรคhetykseen Selenium projekti
POM:n edut
- Page Object Design Pattern sanoo, ettรค kรคyttรถliittymรคn toiminnot ja virrat tulee erottaa todentamisesta. Tรคmรค konsepti tekee koodistamme selkeรคmmรคn ja helposti ymmรคrrettรคvรคn.
- Toinen etu on, ettรค objektivarasto on riippumaton testitapauksista, joten voimme kรคyttรครค samaa objektivarastoa eri tarkoituksiin eri tyรถkaluilla. Voimme esimerkiksi integroida Page Object Modelin Selenium TestNG/JUnit toiminnallisille Testaus ja samaan aikaan JBehaven kanssa/Cucumber hyvรคksymistestausta varten.
- Code tulee vรคhemmรคn ja optimoiduksi, koska se kรคyttรครค uudelleen sivumetodeja POM-luokissa.
- Metodeille annetaan realistisempia nimiรค, jotka voidaan helposti yhdistรครค kรคyttรถliittymรคssรค tapahtuvaan toimintoon. Esimerkiksi jos painikkeen napsauttamisen jรคlkeen siirrytรครคn kotisivulle, metodin nimi on muotoa 'gotoHomePage()'.
POM:n toteuttaminen Selenium?
Yksinkertainen PLog Page Object Model -kehyksen perusrakenteessa, jossa whereManagerEIelementit AUT Ja nรคitรค verkkoelementtejรค kรคsittelevรคt metodit sรคilytetรครคn tukkotiedostossa. Tehtรคvรคn, kuten varmennuksen, tulisi olla erillinen osa testimetodeja.
Tรคydellinen esimerkki
Testitapaus: Mene Guru99 Demo-sivusto.
Vaihe 1) Siirry kohtaan Guru99 Demo-sivusto
Vaihe 2) Tarkista kotisivulla, ettรค teksti โGuru99 Bankโ on lรคsnรค
Vaihe 3) Kirjaudu sisรครคn sovellukseen
Vaihe 4) Varmista, ettรค kotisivulla on tekstiรค "Manger Id: demo"
Tรคssรค esimerkissรค kรคsittelemme kahta sivua:
- Kirjaudu Page
- Kotisivu (nรคkyy, kun kirjaudut sisรครคn)
Sen mukaisesti luomme 2 POM-in Selenium luokat
Guru99 Kirjautumissivu 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 Etusivu POM sisรครคn 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 Yksinkertainen POM sisรครคn Selenium Testitapaus
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"));
}
Mitรค Page Factory sisรคltรครค Selenium?
Sivun tehdas sisรครคn Selenium on sisรครคnrakennettu Page Object Model -kehyskonsepti Selenium WebDriver, joka parantaa yllรคpidettรคvyyttรค vรคhentรคmรคllรค toistuvia elementtihakuja merkintรถjen avulla, ei suoritusnopeuden avulla. Sitรค kรคytetรครคn sivuobjektien alustamiseen tai itse sivuobjektin luomiseen. Sitรค kรคytetรครคn myรถs sivuluokan elementtien alustamiseen ilman "FindElement/s"-metodia.
Tรคssรคkin noudatamme kรคsitettรค sivuobjektivaraston ja testimenetelmien erottamisesta. Lisรคksi luokan PageFactory in avulla Selenium, kรคytรคmme huomautuksia @FindBy lรถytรครคksesi WebElementin. Kรคytรคmme initElements-metodia web-elementtien alustamiseen.
@FindBy voi hyvรคksyรค tagName, partialLinkText, name, linkText, id, css, className, xpath mรครคritteinรค.
Katsotaanpa samaa esimerkkiรค kuin yllรค kรคyttรคen Page Factory -ohjelmaa
Guru99 Kirjautumissivu Page Factorylla
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 Kotisivu Page Factorylla
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 ja Page Factory -konsepti
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"));
}
}
Tรคydellinen projektirakenne nรคyttรครค kaaviolta:
AjaxElementLocatorFactory
AjaxElementLocatorFactory on PageFactory in laiska latauskonsepti SeleniumSitรค kรคytetรครคn verkkoelementtien lรถytรคmiseen vain silloin, kun elementtejรค kรคytetรครคn jossakin toiminnossa. Se mรครคrittรครค WebElements-elementeille aikakatkaisun objektisivuluokalle. Yksi PageFactory-kuvion kรคytรถn tรคrkeimmistรค eduista Selenium on AjaxElementLocatorFactory-luokka.
Tรคssรค, kun elementille suoritetaan toiminto, sen nรคkyvyyden odotus alkaa vasta kyseisestรค hetkestรค. Jos elementtiรค ei lรถydy annetussa aikavรคlissรค, Testitapaus suoritus aiheuttaa NoSuchElementException-poikkeuksen.
Esimerkiksi:
AjaxElementLocatorFactory factory = new AjaxElementLocatorFactory(driver, 10); PageFactory.initElements(factory, this);
Lataa Selenium Projektitiedostot esittelyรค varten tรคssรค opetusohjelmassa











