page object model selenium without using page factory
Das Page Object Model (POM) ist ein Entwurfsmuster zum Verwalten des Objekt-Repositorys für Webelemente. In diesem Tutorial wird erklärt, wie POM in Selen ohne Page Factory implementiert wird:
Das Skript-Automatisierungsprojekt muss so gestaltet sein, dass es optimiert und verständlicher ist. Dies wird mit POM erreicht, das bestimmte Richtlinien zum Entwerfen eines Frameworks befolgt.
Wir werden mehr erfahren über:
- Was ist POM?
- Vorteile der Verwendung von POM in einem Projekt
- Wie erstelle ich ein einfaches POM ohne den Page Factory-Ansatz?
=> Besuchen Sie hier für die exklusive Selenium Training Tutorial-Reihe.
Was du lernen wirst:
Seitenobjektmodell ohne Seitenfactory
Das Seitenobjektmodell ist ein Entwurfsmuster, mit dem das Objekt-Repository für die Webelemente verwaltet wird. Hier werden alle Webelemente und ihre entsprechenden Methoden für jede Webseite in einer separaten Klasse verwaltet. Daher wird selbst eine einzelne Änderung des Attributs eines WebElements in allen Testfällen berücksichtigt, wo immer es verwendet wird. Auf diese Weise wird die Wartung des Objekt-Repositorys vereinfacht.
Das Seitenobjektmodell eignet sich am besten für Anwendungen mit mehreren Seiten oder Status.
Hier sind die Video-Tutorials:
Teil I.
Teil II
Vorteile von POM
Im Folgenden sind einige Vorteile von POM aufgeführt:
- Es ist einfacher, den Code zu pflegen. Alle Änderungen an der Benutzeroberfläche werden dort angezeigt, wo sie in der Klasse verwendet werden.
- Robust und macht Code lesbar (Methoden haben realistischere Namen).
- Macht den Code wiederverwendbar und reduziert die Duplizierung von Code (das Objekt-Repository ist unabhängig von Testfällen).
- Der Code wird kleiner und optimiert.
Schritte zum Erstellen eines POM ohne Page Factory-Modell
# 1) Erstellen Sie eine Java-Klasse für jede Seite in der Anwendung.
#zwei) Deklarieren Sie in jeder Klasse alle Webelemente als Variable.
#3) Implementieren Sie entsprechende Methoden, die auf die Variablen einwirken.
Das Entwurfsmuster kann mit 2 Schichten / Paketen strukturiert werden:
- Seitenebene hält die Seiten der Anwendung als einzelne Java-Klasse. In jeder Klasse werden WebElements als Variablen deklariert und die Aktionen als Methoden ausgeführt.
- Testebene hält die Testfälle der Anwendung und deren Überprüfungsteil.
Nehmen wir ein Beispiel für ein einfaches Szenario:
- Öffnen Sie die URL einer Anwendung.
- Geben Sie die E-Mail-Adresse und das Passwort ein.
- Klicken Sie auf die Schaltfläche Anmelden.
- Überprüfen Sie die erfolgreiche Anmeldemeldung auf der Suchseite.
Seitenebene
Hier haben wir 2 Seiten,
- Startseite : Die Seite wird geöffnet, wenn die URL eingegeben wird. Hier geben wir die Daten für die Anmeldung ein.
- SearchPage : Seite, die nach erfolgreicher Anmeldung angezeigt wird.
In der Seitenebene wird jede Seite in der Webanwendung als separate Java-Klasse deklariert, und ihre Locators und Aktionen werden dort erwähnt.
Schritte zum Erstellen von POM mit Echtzeitbeispielen
# 1) Erstellen Sie eine Java-Klasse für jede Seite:
In diesem Beispiel Wir werden auf 2 Webseiten zugreifen, 'Home' - und 'Search' -Seiten. Daher erstellen wir zwei Java-Klassen in der Seitenschicht (oder in einem Paket, z. B. com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Erstellen Sie WebElements als Variablen:
Fragen und Antworten zu Leistungstests
Wir würden interagieren mit:
- Feld E-Mail, Passwort, Anmeldeschaltfläche auf der Startseite.
- Eine erfolgreiche Nachricht in der SearchPage.
Daher erstellen wir WebElements als Variablen mit der By-Klasse.
Zum Beispiel: Wenn E-Mail xpath as hat // div [enthält (@id, 'EmailId')], dann ist seine Variablendeklaration
// Locator für EmailId Feld
By EmailAddress = By.xpath (// div [enthält (@id, 'EmailId')])
# 3) Erstellen Sie Methoden für Aktionen, die in WebElements ausgeführt werden:
Die folgenden Aktionen werden in WebElements ausgeführt:
- Geben Sie action in das Feld EmailAddress ein.
- Geben Sie action in das Feld Passwort ein.
- Klicken Sie auf der Schaltfläche Anmelden auf Aktion.
Zum Beispiel, Benutzerdefinierte Methoden werden für jede Aktion im WebElement wie folgt erstellt:
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Hier wird die ID als Parameter in der Methode übergeben, da die Eingabe vom Benutzer aus dem Haupttestfall gesendet wird.
Hinweis ::Für jede Klasse in der Seitenebene muss ein Konstruktor erstellt werden, um die Treiberinstanz von der Hauptklasse in der Testschicht abzurufen.
Wir initiieren den Treiber hier nicht, sondern seine Instanz wird von der Hauptklasse empfangen, wenn das Objekt der Page Layer-Klasse erstellt wird.
Für jede Seite werden zwei Java-Klassen erstellt, wie unten gezeigt:
HomePage.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;
Testebene
In dieser Klasse sind Testfälle implementiert.
Wir erstellen ein separates Paket, beispielsweise com.automation.test, und erstellen dann hier eine Java-Klasse (MainClass.java).
Schritte zum Erstellen von Testfällen:
- Initialisieren Sie den Treiber und öffnen Sie die Anwendung.
- Erstellen Sie ein Objekt der PageLayer-Klasse (für jede Webseite) und übergeben Sie die Treiberinstanz als Parameter.
- Rufen Sie mit dem erstellten Objekt die Methoden in der PageLayer-Klasse (für jede Webseite) auf, um Aktionen / Überprüfungen durchzuführen.
- Wiederholen Sie Schritt 3, bis alle Aktionen ausgeführt wurden, und schließen Sie dann den Treiber.
//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(); } }
Fazit
In diesem Tutorial wurden die Vorteile des Seitenobjektmodells und das Erstellen eines grundlegenden POM-Entwurfsmusters ohne Verwendung von Page Factory in Selen erläutert.
Im kommenden Tutorial werden wir einen weiteren Ansatz von POM diskutieren, nämlich den Page Factory-Ansatz.
=> Überprüfen Sie ALLE Selen-Tutorials hier.
Literatur-Empfehlungen
- Seitenobjektmodell (POM) mit Page Factory | Selen Tutorial
- Spiralmodell - Was ist das SDLC-Spiralmodell?
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- Verwendung der Selenium Select-Klasse zur Behandlung von Dropdown-Elementen auf einer Webseite - Selenium Tutorial # 13
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium Tutorial: Selenium Webdriver-Tests auf Chrome
- 30+ beste Selen-Tutorials: Lernen Sie Selen anhand realer Beispiele
- Teilzeit freiberufliche Stellenangebot für Selenexperten