page object model selenium without using page factory
Page Object Model (POM) är ett designmönster för att upprätthålla objektförvar för webbelement. Denna handledning förklarar hur man implementerar POM i selen utan sidfabrik:
Det skriptade automatiseringsprojektet måste utformas så att det är optimerat och lättare att förstå. Detta uppnås med hjälp av POM som följer vissa riktlinjer för att utforma ett ramverk.
Vi lär oss mer om:
- Vad är POM?
- Fördelar med att använda POM i ett projekt
- Hur skapar jag en grundläggande POM utan att använda Page Factory Approach?
=> Besök här för den exklusiva handledningsserien för träning av selen.
Vad du kommer att lära dig:
Sidobjektmodell utan sidfabrik
Sidobjektmodell är ett designmönster som används för att underhålla objektförvaret för webbelementen. Här hålls alla webbelement och deras motsvarande metoder i en separat klass för varje webbsida. Därför kommer även en enda ändring av attributet till ett WebElement att återspegla i alla testfall varhelst det används. På detta sätt förbättrar det enklare underhåll av objektförvar.
Sidobjektmodellen är bäst när den används för applikationer som har flera sidor eller tillstånd.
Här är videotutorialerna:
Del I
Del II
Fördelar med POM
Nedan följer några fördelar med POM:
- Det är lättare att underhålla koden. Ändringar av användargränssnittet kommer att återspeglas varhelst det används i klassen.
- Robust och gör kod läsbar (Metoder har mer realistiska namn).
- Gör koden återanvändbar och minskar duplicering av koden (Objektförvaret är oberoende av testfall).
- Koden blir mindre och optimerad.
Steg för att skapa en POM utan sidfabriksmodell
# 1) Skapa en Java-klass för varje sida i applikationen.
#två) I varje klass, förklara alla webbelement som variabler.
# 3) Implementera motsvarande metoder som verkar på variablerna.
Designmönstret kan struktureras med två lager / paket:
- Sidlager kommer att hålla applikationens sidor som individuell Java-klass. I varje klass kommer WebElements att deklareras som variabler och de åtgärder som utförs som metoder.
- Testa lager kommer att hålla testfall av ansökan och dess verifieringsdel.
Låt oss ta ett exempel på ett enkelt scenario:
- Öppna webbadressen till en applikation.
- Skriv e-postadressen och lösenordsdata.
- Klicka på inloggningsknappen.
- Verifiera lyckat inloggningsmeddelande på söksidan.
Sidlager
Här har vi två sidor,
- Hemsida : Sidan öppnas när URL: n anges och det är här vi anger informationen för inloggning.
- Sök sida : Sidan som visas efter en lyckad inloggning.
I sidlagret deklareras varje sida i webbapplikationen som en separat Java-klass och dess lokaliserare och åtgärder nämns där.
Steg för att skapa POM med realtidsexempel
# 1) Skapa en Java-klass för varje sida:
I denna exempel , kommer vi åt två webbsidor, 'Hem' och 'Sök' -sidor. Därför kommer vi att skapa två Java-klasser i sidlagret (eller i ett paket säg com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Skapa WebElements som variabler:
vad är den bästa gratis datorrengöraren?
Vi skulle interagera med:
- E-post, lösenord, inloggningsknappfält på hemsidan.
- Ett framgångsrikt meddelande på SearchPage.
Så vi kommer att skapa WebElements som variabler med hjälp av klass 'By'.
Till exempel: Om e-post har xpath som // div (innehåller (@id, 'EmailId')), då är dess variabla deklaration
// Locator för EmailId-fältet
By EmailAddress = By.xpath (// div (innehåller (@id, ‘EmailId’)))
# 3) Skapa metoder för åtgärder som utförs på WebElements:
Nedanstående åtgärder utförs på WebElements:
- Skriv åtgärd i fältet EmailAddress.
- Skriv åtgärd i fältet Lösenord.
- Klicka på åtgärden på knappen Logga in.
Till exempel, Användardefinierade metoder skapas för varje åtgärd på WebElement som,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Här skickas Id som en parameter i metoden, eftersom ingången skickas av användaren från huvudtestfallet.
Notera :En konstruktör måste skapas för varje klass i sidlagret för att få förarinstansen från huvudklassen i testlagret.
Vi initierar inte drivrutinen här, utan dess instans tas emot från huvudklassen när objektet för Page Layer-klassen skapas.
Två Java-klasser skapas för varje sida enligt nedan:
Hemsida.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
Testa lager
Testfall implementeras i denna klass.
Vi skapar ett separat paket säger, com.automation.test och skapar sedan en Java-klass här (MainClass.java).
Steg för att skapa testfall:
- Initiera drivrutinen och öppna programmet.
- Skapa ett objekt från PageLayer-klassen (för varje webbsida) och skicka drivrutinsinstansen som en parameter.
- Ringa ett samtal till metoderna i PageLayer-klassen (för varje webbsida) för att utföra åtgärder / verifiering med hjälp av det skapade objektet.
- Upprepa steg 3 tills alla åtgärder utförs och stäng sedan drivrutinen.
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
Slutsats
Denna handledning förklarade fördelarna med Page Object Model och hur man skapar ett grundläggande POM-designmönster utan att använda Page Factory i Selen.
I den kommande handboken kommer vi att diskutera ytterligare ett tillvägagångssätt för POM, det vill säga med hjälp av Page Factory-metoden.
=> Kontrollera ALLA Selen-handledning här.
Rekommenderad läsning
- Sidobjektmodell (POM) med sidfabrik | Selen Tutorial
- Spiral Model - Vad är SDLC Spiral Model?
- Gurka Selen Tutorial: Gurka Java Selen WebDriver Integration
- Användning av Selen Select Class för hantering av rullgardinselement på en webbsida - Selen Tutorial # 13
- Introduktion till Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selen Tutorial: Selen Webdriver Tests på Chrome
- 30+ bästa selen-självstudier: Lär dig selen med riktiga exempel
- Deltidsfrilansande jobbmöjlighet för selenexperter