Seitenobjektmodell (POM) & Seitenfabrik in Selen Tutorial

Inhaltsverzeichnis:

Anonim

Was ist ein Seitenobjektmodell?

Das Page Object Model (POM) ist ein Entwurfsmuster, das häufig in der Testautomatisierung verwendet wird und das Object Repository für Web-UI-Elemente erstellt. Der Vorteil des Modells besteht darin, dass es die Codeduplizierung reduziert und die Testwartung verbessert.

Unter diesem Modell sollte für jede Webseite in der Anwendung eine entsprechende Seitenklasse vorhanden sein. Diese Page-Klasse identifiziert die WebElements dieser Webseite und enthält auch Page-Methoden, die Operationen an diesen WebElements ausführen. Der Name dieser Methoden sollte gemäß der von ihnen ausgeführten Aufgabe angegeben werden. Wenn also ein Loader auf das Erscheinen des Zahlungsgateways wartet, kann der Name der POM-Methode waitForPaymentScreenDisplay () lauten.

In diesem Tutorial lernen Sie:

  • Warum Seitenobjektmodell?
  • Vorteile von POM
  • Wie implementiere ich POM?
  • Was ist Page Factory?
  • Guru99 TestCase mit Page Factory-Konzept
  • AjaxElementLocatorFactory

Warum Seitenobjektmodell?

Das Starten einer UI-Automatisierung in Selenium WebDriver ist KEINE schwierige Aufgabe. Sie müssen nur Elemente finden und Operationen daran ausführen.

Betrachten Sie dieses einfache Skript, um sich auf einer Website anzumelden

Wie Sie sehen können, finden wir nur Elemente und füllen Werte für diese Elemente.

Dies ist ein kleines Skript. Die Skriptpflege sieht einfach aus. Aber mit der Zeit wird die Testsuite wachsen. Wenn Sie Ihrem Code immer mehr Zeilen hinzufügen, wird es schwierig.

Das Hauptproblem bei der Skriptwartung besteht darin, dass Sie alle 10 Skripte ändern müssen, wenn 10 verschiedene Skripte dasselbe Seitenelement verwenden, wobei bei jeder Änderung dieses Elements alle 10 Skripte geändert werden müssen. Dies ist zeitaufwändig und fehleranfällig.

Ein besserer Ansatz für die Skriptpflege besteht darin, eine separate Klassendatei zu erstellen, in der Webelemente gefunden, gefüllt oder überprüft werden. Diese Klasse kann mit diesem Element in allen Skripten wiederverwendet werden. Wenn sich das Webelement in Zukunft ändert, müssen wir die Änderung nur in einer Klassendatei und nicht in 10 verschiedenen Skripten vornehmen.

Dieser Ansatz wird in Selen als Seitenobjektmodell bezeichnet. Es hilft, den Code lesbarer, wartbarer und wiederverwendbarer zu machen.

Vorteile von POM

  1. Das Seitenobjekt-Entwurfsmuster besagt, dass Operationen und Abläufe in der Benutzeroberfläche von der Überprüfung getrennt werden sollten. Dieses Konzept macht unseren Code sauberer und verständlicher.
  2. Der zweite Vorteil ist, dass das Objekt-Repository unabhängig von Testfällen ist, sodass wir dasselbe Objekt-Repository für einen anderen Zweck mit verschiedenen Tools verwenden können. Zum Beispiel können wir das Seitenobjektmodell in Selen mit TestNG / JUnit für Funktionstests und gleichzeitig mit JBehave / Cucumber für Abnahmetests integrieren.
  3. Code wird aufgrund der wiederverwendbaren Seitenmethoden in den POM-Klassen weniger und optimiert.
  4. Methoden erhalten realistischere Namen, die leicht mit dem Vorgang in der Benutzeroberfläche verknüpft werden können. Wenn wir also nach dem Klicken auf die Schaltfläche auf der Startseite landen, lautet der Methodenname 'gotoHomePage ()'.

Wie implementiere ich POM?

Einfaches POM:

Dies ist die Grundstruktur des Page-Objektmodell-Frameworks, in der alle Webelemente des AUT und die Methode, die mit diesen Webelementen ausgeführt wird, in einer Klassendatei verwaltet werden. Eine Aufgabe wie die Überprüfung sollte als Teil der Testmethoden getrennt sein.

Vollständiges Beispiel

Testfall: Gehen Sie zur Guru99 Demo Site.

Schritt 1) ​​Gehen Sie zur Guru99 Demo Site
Schritt 2) Auf der Homepage ist der Prüftext "Guru99 Bank" vorhanden
Schritt 3) Melden Sie sich bei der Anwendung an
Schritt 4) Stellen Sie sicher, dass die Startseite Text als "Manager-ID: Demo" enthält.

Hier haben wir es mit 2 Seiten zu tun

  1. Loginseite
  2. Startseite (wird angezeigt, sobald Sie sich angemeldet haben)

Dementsprechend erstellen wir 2 POM in Selen-Klassen

Guru99 Anmeldeseite POM

Paketseiten;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;öffentliche Klasse Guru99Login {WebDriver-Treiber;By user99GuruName = By.name ("uid");By password99Guru = By.name ("Passwort");By titleText = By.className ("barone");By login = By.name ("btnLogin");public Guru99Login (WebDriver-Treiber) {this.driver = Treiber;}}// Benutzername im Textfeld festlegenpublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}}// Passwort im Passwort-Textfeld setzenpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}}// Klicken Sie auf die Schaltfläche Anmeldenpublic void clickLogin () {driver.findElement (login) .click ();}}// Den Titel der Anmeldeseite abrufenpublic String getLoginTitle () {return driver.findElement (titleText) .getText ();}}/ *** Diese POM-Methode wird im Testfall für die Anmeldung in der Anwendung verfügbar gemacht* @param strUserName* @param strPasword* @Rückkehr* /public void loginToGuru99 (String strUserName, String strPasword) {// Benutzername eintragenthis.setUserName (strUserName);// Passwort eingebenthis.setPassword (strPasword);// Klicken Sie auf die Schaltfläche Anmeldenthis.clickLogin ();}}}}

Guru99 Homepage POM in Selen

Paketseiten;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;öffentliche Klasse Guru99HomePage {WebDriver-Treiber;By homePageUserName = By.xpath ("// table // tr [@ class = 'Heading3']");public Guru99HomePage (WebDriver-Treiber) {this.driver = Treiber;}}// Den Benutzernamen von der Homepage abrufenpublic String getHomePageDashboardUserName () {return driver.findElement (homePageUserName) .getText ();}}}}

Guru99 Einfaches POM im Selen-Testfall

Pakettest;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;Seiten importieren.Guru99HomePage;Seiten importieren.Guru99Login;öffentliche Klasse Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";WebDriver-Treiber;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);Treiber = neuer FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}}/ *** Dieser Testfall wird unter http://demo.guru99.com/V4/ angemeldet.* Überprüfen Sie den Titel der Anmeldeseite als guru99 Bank* Melden Sie sich bei der Anwendung an* Überprüfen Sie die Startseite mithilfe der Dashboard-Nachricht* /@ Test (Priorität = 0)public void test_Home_Page_Appear_Correct () {// Anmeldeseitenobjekt erstellenobjLogin = neuer Guru99Login (Treiber);// Überprüfen Sie den Titel der AnmeldeseiteString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Enthält ("guru99 bank"));// Anmeldung bei der AnwendungobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// gehe zur nächsten SeiteobjHomePage = neue Guru99HomePage (Treiber);// Homepage überprüfenAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Enthält ("Manager-ID: mgr123"));}}

Was ist Page Factory in Selen?

Page Factory in Selenium ist ein integriertes Framework-Konzept für das Page Object Model für Selenium WebDriver, das jedoch sehr optimiert ist. Es wird zur Initialisierung von Seitenobjekten oder zum Instanziieren des Seitenobjekts selbst verwendet. Es wird auch verwendet, um Seitenklassenelemente ohne Verwendung von "FindElement / s" zu initialisieren.

Auch hier folgen wir dem Konzept der Trennung von Seitenobjekt-Repository und Testmethoden. Zusätzlich verwenden wir mit Hilfe der Klasse PageFactory in Selenium Annotations @FindBy , um WebElement zu finden. Wir verwenden die initElements-Methode, um Webelemente zu initialisieren

@FindBy kann TagName, PartialLinkText, Name, LinkText, ID, CSS, Klassenname und Xpath als Attribute akzeptieren .

Schauen wir uns das gleiche Beispiel wie oben mit Page Factory an

Guru99 Anmeldeseite mit Page Factory

Paket PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;öffentliche Klasse Guru99Login {/ *** Alle WebElements sind durch die Annotation @FindBy gekennzeichnet* /WebDriver-Treiber;@FindBy (name = "uid")WebElement user99GuruName;@FindBy (name = "password")WebElement password99Guru;@FindBy (className = "barone")WebElement titleText;@FindBy (name = "btnLogin")WebElement-Login;public Guru99Login (WebDriver-Treiber) {this.driver = Treiber;// Diese initElements-Methode erstellt alle WebElementsPageFactory.initElements (Treiber, dies);}}// Benutzername im Textfeld festlegenpublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}}// Passwort im Passwort-Textfeld setzenpublic void setPassword (String strPassword) {password99Guru.sendKeys (strPassword);}}// Klicken Sie auf die Schaltfläche Anmeldenpublic void clickLogin () {login.click ();}}// Den Titel der Anmeldeseite abrufenpublic String getLoginTitle () {return titleText.getText ();}}/ *** Diese POM-Methode wird im Testfall für die Anmeldung in der Anwendung verfügbar gemacht* @param strUserName* @param strPasword* @Rückkehr* /public void loginToGuru99 (String strUserName, String strPasword) {// Benutzername eintragenthis.setUserName (strUserName);// Passwort eingebenthis.setPassword (strPasword);// Klicken Sie auf die Schaltfläche Anmeldenthis.clickLogin ();}}}}

Guru99 Homepage mit Seitenfabrik

Paket PageFactory;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;öffentliche Klasse Guru99HomePage {WebDriver-Treiber;@FindBy (xpath = "// table // tr [@ class = 'Heading3']")WebElement homePageUserName;public Guru99HomePage (WebDriver-Treiber) {this.driver = Treiber;// Diese initElements-Methode erstellt alle WebElementsPageFactory.initElements (Treiber, dies);}}// Den Benutzernamen von der Homepage abrufenpublic String getHomePageDashboardUserName () {return homePageUserName.getText ();}}}}

Guru99 TestCase mit Page Factory-Konzept

Pakettest;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;öffentliche Klasse Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";WebDriver-Treiber;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);Treiber = neuer FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}}/ *** Dieser Test geht zu http://demo.guru99.com/V4/* Überprüfen Sie den Titel der Anmeldeseite als guru99 Bank* Melden Sie sich bei der Anwendung an* Überprüfen Sie die Startseite mithilfe der Dashboard-Nachricht* /@ Test (Priorität = 0)public void test_Home_Page_Appear_Correct () {// Anmeldeseitenobjekt erstellenobjLogin = neuer Guru99Login (Treiber);// Überprüfen Sie den Titel der AnmeldeseiteString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Enthält ("guru99 bank"));// Anmeldung bei der AnwendungobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// gehe zur nächsten SeiteobjHomePage = neue Guru99HomePage (Treiber);// Homepage überprüfenAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Enthält ("Manager-ID: mgr123"));}}}}

Die vollständige Projektstruktur sieht wie im Diagramm aus:

AjaxElementLocatorFactory

AjaxElementLocatorFactory ist ein Konzept zum verzögerten Laden von PageFactory in Selen. Es wird nur verwendet, um die Webelemente zu finden, wenn die Elemente in einer Operation verwendet werden. Es weist der Objektseitenklasse ein Zeitlimit für WebElements zu. Einer der Hauptvorteile der Verwendung des Musters PageFactory in Selen ist die AjaxElementLocatorFactory-Klasse.

Wenn hier eine Operation an einem Element ausgeführt wird, beginnt das Warten auf seine Sichtbarkeit erst ab diesem Moment. Wenn das Element im angegebenen Zeitintervall nicht gefunden wird, löst die Testfallausführung die Ausnahme 'NoSuchElementException' aus.

Zusammenfassung

  1. Das Seitenobjektmodell in Selenium Websdriver ist ein Entwurfsmuster für das Objekt-Repository.
  2. Das Selenium-Seitenobjektmodell erstellt unseren Testcode wartbar und wiederverwendbar.
  3. Page Factory ist eine optimierte Methode zum Erstellen eines Objekt-Repositorys im Rahmenkonzept des Page Object Model.
  4. AjaxElementLocatorFactory ist ein Konzept zum verzögerten Laden in Page Factory - Seitenobjekt-Entwurfsmuster, mit dem WebElements nur identifiziert werden, wenn sie in einem Vorgang verwendet werden.

Laden Sie die Selenium-Projektdateien für die Demo in diesem Tutorial herunter