page object model selenium without using page factory
Le modèle d'objet de page (POM) est un modèle de conception permettant de gérer le référentiel d'objets pour les éléments Web. Ce didacticiel explique comment implémenter POM dans Selenium sans Page Factory:
Le projet d'automatisation scripté doit être conçu de manière à être optimisé et plus facile à comprendre. Ceci est réalisé en utilisant POM qui suit certaines directives pour concevoir un cadre.
Nous en apprendrons plus sur:
- Qu'est-ce que POM?
- Avantages de l'utilisation de POM dans un projet
- Comment créer un POM de base sans utiliser l'approche Page Factory?
=> Visitez ici pour la série exclusive de didacticiels de formation Selenium.
Ce que vous apprendrez:
Modèle d'objet de page sans page Factory
Le modèle d'objet de page est un modèle de conception utilisé pour gérer le référentiel d'objets pour les éléments Web. Ici, tous les éléments Web et leurs méthodes correspondantes sont conservés dans une classe distincte pour chaque page Web. Par conséquent, même un seul changement dans l'attribut d'un WebElement se reflétera dans tous les cas de test partout où il est utilisé. De cette manière, il facilite la maintenance du référentiel d'objets.
Le modèle d'objets de page est le meilleur lorsqu'il est utilisé pour des applications qui ont plusieurs pages ou états.
Voici les didacticiels vidéo:
Partie I
Partie II
Avantages du POM
Voici quelques avantages du POM:
- Il est plus facile de maintenir le code. Toute modification de l'interface utilisateur sera reflétée partout où elle est utilisée dans la classe.
- Robuste et rend le code lisible (les méthodes ont des noms plus réalistes).
- Rend le code réutilisable et réduit la duplication du code (le référentiel d'objets est indépendant des cas de test).
- Le code devient moins et optimisé.
Procédure de création d'un POM sans modèle de fabrique de pages
#1) Créez une classe Java pour chaque page de l'application.
#deux) Dans chaque classe, déclarez tous les éléments Web en tant que variables.
# 3) Implémentez les méthodes correspondantes agissant sur les variables.
Le modèle de conception peut être structuré en utilisant 2 couches / packages:
- Couche de page tiendra les pages de l'application en tant que classe Java individuelle. Chaque classe aura des WebElements déclarés en tant que variables et les actions exécutées en tant que méthodes.
- Couche de test tiendra les cas de test de l'application et sa partie vérification.
Prenons un exemple de scénario simple:
- Ouvrez l'URL d'une application.
- Saisissez l'adresse e-mail et le mot de passe.
- Cliquez sur le bouton Connexion.
- Vérifiez le message de connexion réussi sur la page de recherche.
Couche de page
Ici nous avons 2 pages,
- Page d'accueil : La page s'ouvre lorsque l'URL est saisie et c'est ici que nous saisissons les données pour la connexion.
- RecherchePage : Page qui s'affiche après une connexion réussie.
Dans la couche Page, chaque page de l'application Web est déclarée en tant que classe Java distincte et ses localisateurs et actions y sont mentionnés.
Étapes pour créer un POM avec des exemples en temps réel
# 1) Créez une classe Java pour chaque page:
Dans ce exemple , nous accèderons à 2 pages Web, les pages «Accueil» et «Recherche». Par conséquent, nous allons créer 2 classes Java dans la couche de page (ou dans un package, disons com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Créez des WebElements en tant que variables:
Questions d'entretiens oracle pl sql pour 8 ans d'expérience
Nous interagirions avec:
- Courriel, mot de passe, champ du bouton de connexion sur la page d'accueil.
- Un message réussi dans SearchPage.
Nous allons donc créer des WebElements en tant que variables en utilisant la classe «By».
Par exemple: Si Email a xpath comme // div (contient (@id, ‘EmailId’)), alors sa déclaration de variable est
// Localisateur pour le champ EmailId
By EmailAddress = By.xpath (// div (contains (@id, ‘EmailId’)))
# 3) Créez des méthodes pour les actions effectuées sur WebElements:
Les actions ci-dessous sont effectuées sur WebElements:
- Saisissez l'action dans le champ EmailAddress.
- Saisissez une action dans le champ Mot de passe.
- Cliquez sur l'action sur le bouton Connexion.
Par exemple, Les méthodes définies par l'utilisateur sont créées pour chaque action sur le WebElement comme suit:
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Ici, l'ID est passé en paramètre dans la méthode, car l'entrée sera envoyée par l'utilisateur à partir du scénario de test principal.
Remarque :Un constructeur doit être créé pour chaque classe dans la couche de page pour obtenir l'instance de pilote de la classe Main dans la couche de test.
Nous n'initions pas le pilote ici, mais son instance est reçue de la classe principale lorsque l'objet de la classe Page Layer est créé.
Deux classes Java sont créées pour chaque page, comme indiqué ci-dessous:
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;
Couche de test
Les cas de test sont implémentés dans cette classe.
Nous créons un package séparé, disons com.automation.test, puis créons une classe Java ici (MainClass.java).
Étapes pour créer des scénarios de test:
- Initialisez le pilote et ouvrez l'application.
- Créez un objet de la classe PageLayer (pour chaque page Web) et transmettez l'instance de pilote en tant que paramètre.
- À l'aide de l'objet créé, appelez les méthodes de la classe PageLayer (pour chaque page Web) pour effectuer des actions / vérification.
- Répétez l'étape 3 jusqu'à ce que toutes les actions soient effectuées, puis fermez le pilote.
//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(); } }
Conclusion
Ce didacticiel a expliqué les avantages du modèle d'objet de page et comment créer un modèle de conception POM de base sans utiliser Page Factory dans Selenium.
Dans le prochain tutoriel, nous discuterons encore d'une autre approche de POM, c'est-à-dire en utilisant l'approche Page Factory.
=> Consultez TOUS les tutoriels Selenium ici.
lecture recommandée
- Modèle d'objet de page (POM) avec Page Factory | Tutoriel Selenium
- Modèle en spirale - Qu'est-ce que le modèle en spirale SDLC?
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver
- Utilisation de la classe Selenium Select pour la gestion des éléments déroulants sur une page Web - Tutoriel Selenium # 13
- Introduction à Selenium WebDriver - Tutoriel Selenium # 8
- Tutoriel ChromeDriver Selenium: Tests Selenium Webdriver sur Chrome
- 30+ meilleurs didacticiels sur le sélénium: apprenez le sélénium avec de vrais exemples
- Opportunité d'emploi indépendant à temps partiel pour les experts Selenium