Selenium Framework : données, mots clés et hybride

Qu’est ce qu' Selenium Cadre?

Pour Selenium Cadre d'automatisation est une structure de code qui rend la maintenance du code facile et efficace. Sans frameworks, les utilisateurs peuvent placer le « code » et les « données » au même endroit qui n'est ni réutilisable ni lisible. Les frameworks produisent des résultats bénéfiques tels qu'une réutilisabilité accrue du code, une plus grande portabilité, une réduction du coût de maintenance des scripts, une meilleure lisibilité du code, etc.

Types d' Selenium Cadre

Il y a principalement trois type de cadres créé par Selenium WebDriver pour automatiser les cas de tests manuels

  • Cadre basé sur les données
  • Cadre axé sur les mots clés
  • Cadre hybride

Types d' Selenium Cadre

Cadre basé sur les données dans Selenium

Cadre basé sur les données dans Selenium est une méthode de séparation des ensembles de données du scénario de test. Une fois les ensembles de données séparés du scénario de test, ils peuvent être facilement modifiés pour une fonctionnalité spécifique sans changer le code. Il est utilisé pour récupérer des cas de test et des suites à partir de fichiers externes tels que Excel, .csv, .xml ou certaines tables de base de données.

Cadre basé sur les données dans Selenium

Pour lire ou écrire un Excel, Apache met à disposition une très célèbre bibliothèque POI. Cette bibliothèque est suffisamment capable de lire et d'écrire à la fois XLS et mes XLSX format de fichier Excel.

Lire XLS fichiers, un CSSS la mise en œuvre est assurée par la bibliothèque POI.

Lire XLSX, XSSF implémentation de POI bibliothèque sera le choix. Étudions ces implémentations en détail.

Nous avons déjà entendu parler des tests pilotés par les données dans notre précédent tutoriel

Cadre basé sur les mots clés dans Selenium

Cadre basé sur les mots clés dans Selenium est une méthode utilisée pour accélérer les tests automatisés en séparant les mots-clés pour un ensemble commun de fonctions et d'instructions. Toutes les opérations et instructions à effectuer sont écrites dans un fichier externe comme une feuille Excel. Les utilisateurs peuvent facilement contrôler et spécifier les fonctionnalités qu’ils souhaitent tester.

Voici à quoi ressemble le cadre complet

Cadre basé sur les mots clés dans Selenium

Comme vous pouvez le voir, il s'agit d'un cadre en 5 étapes. Étudions-le étape par étape en détail

Étape 1)

  • Le script du pilote Execute.java appellera ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java a un script POI pour lire les données d'un Excel

Étape 2)

  • ReadGuru99ExcelFile.java lira les données de TestCase.xlsx
  • Voici à quoi ressemble la feuille-

Cadre basé sur les mots clés dans Selenium

  • Selon les mots-clés écrits dans le fichier Excel, le framework effectuera l'opération sur l'interface utilisateur.
  • Par exemple, nous devons cliquer sur un bouton « Connexion ». En conséquence, notre Excel aura un mot-clé « Clic ». Désormais, l'AUT peut avoir des centaines de boutons sur une page, pour identifier un bouton de connexion, dans Excel, nous saisirons le nom de l'objet comme bouton de connexion et le type d'objet comme nom (voir la ligne en surbrillance dans l'image ci-dessus). Le type d'objet peut être XPath, le nom CSS ou toute autre valeur

Étape 3) ReadGuru99ExcelFile.java transmettra ces données au script du pilote Execute.java

Étape 4)

  • Pour tous nos éléments Web d'interface utilisateur, nous devons créer un référentiel d'objets dans lequel nous placerons leur localisateur d'éléments (comme Xpath, nom, chemin CSS, nom de classe, etc.)

Cadre basé sur les mots clés dans Selenium

  • Execute.java (notre script de pilote) lira l'intégralité du référentiel d'objets et le stockera dans une variable
  • Pour lire ce référentiel d'objets, nous avons besoin d'une classe ReadObject qui possède une méthode getObjectRepository pour le lire.
  • Cadre basé sur les mots clés dans Selenium

NOTE: Vous vous demandez peut-être pourquoi devons-nous créer un référentiel d'objets. La réponse aide à la maintenance du code. Par exemple, nous utilisons le bouton avec name = btnlogin dans 10 cas de test différents. À l'avenir, le développeur décide de changer le nom de btnlogin pour soumettre. Vous devrez apporter une modification dans les 10 cas de test. Dans le cas d'un référentiel d'objets, vous effectuerez la modification une seule fois dans le référentiel.

Étape 5)

  • Le pilote transmettra les données d'Excel et du référentiel d'objets à l'interface utilisateurOperaclasse d'action
  • UIOperaLa classe de tion a des fonctions pour effectuer des actions correspondant à des mots-clés comme CLICK, SETTEXT etc… mentionnés dans Excel
  • UIOperala classe de tion est une Java classe qui a l'implémentation réelle du code pour effectuer des opérations sur les éléments Web

Cadre basé sur les mots clés dans Selenium

Le projet complet ressemblera à-

Cadre basé sur les mots clés dans Selenium

Regardons un exemple :

Scénario de test: Nous exécutons 2 cas de test

objet.propriétés

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

ReadGuru99ExcelFile.java

package excelExportAndFileIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadGuru99ExcelFile {
    
    public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{
    //Create a object of File class to open xlsx file
    File file =    new File(filePath+"\\"+fileName);
    //Create an object of FileInputStream class to read excel file
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    //Find the file extension by spliting file name in substing and getting only extension name
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    //Check condition if the file is xlsx file
    if(fileExtensionName.equals(".xlsx")){
    //If it is xlsx file then create object of XSSFWorkbook class
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    //Check condition if the file is xls file
    else if(fileExtensionName.equals(".xls")){
        //If it is xls file then create object of XSSFWorkbook class
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    //Read sheet inside the workbook by its name
    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);
     return guru99Sheet;    
    }
}

ReadObject.java

package operation;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadObject {
    Properties p = new Properties();
    public Properties getObjectRepository() throws IOException{
        //Read object repository file
        InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties"));
        //load all objects
        p.load(stream);
         return p;
    }
    
}

UIOperation.java

package operation;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UIOperation {
    WebDriver driver;
    public UIOperation(WebDriver driver){
        this.driver = driver;
    }
    public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{
        System.out.println("");
        switch (operation.toUpperCase()) {
        case "CLICK":
            //Perform click
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            //Set text on control
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            //Get url of application
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            //Get text of an element
            driver.findElement(this.getObject(p,objectName,objectType)).getText();
            break;
        default:
            break;
        }
    }
    
    /**
     * Find element BY using object type and value
     * @param p
     * @param objectName
     * @param objectType
     * @return
     * @throws Exception
     */
    private By getObject(Properties p,String objectName,String objectType) throws Exception{
        //Find by xpath
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        //find by class
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        //find by name
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        //Find by css
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        //find by link
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        //find by partial link
        else if(objectType.equalsIgnoreCase("PARTIALLINK")){
            
            return By.partialLinkText(p.getProperty(objectName));
            
        }else
        {
            throw new Exception("Wrong object type");
        }
    }
}

ExécuterTest.java

package testCases;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class ExecuteTest {
@Test
    public void testLogin() throws Exception {
        // TODO Auto-generated method stub
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    //Create a loop over all the rows of excel file to read it
    for (int i = 1; i < rowCount+1; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i);
        //Check if the first cell contain a value, if yes, That means it is the new testcase name
        if(row.getCell(0).toString().length()==0){
        //Print testcase detail on console
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        //Call perform function to perform operation on UI
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            //Print the new testcase name when it started
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

Après l'exécution, la sortie ressemblera à -

Cadre basé sur les mots clés dans Selenium

Télécharger Selenium Fichiers de projet pour la démo de ce didacticiel

Cadre hybride

Cadre hybride in Selenium est un concept dans lequel nous utilisons l'avantage à la fois du cadre axé sur les mots clés et du cadre axé sur les données. Il s'agit d'un framework facile à utiliser qui permet aux testeurs manuels de créer des cas de test en regardant simplement les mots-clés, les données de test et le référentiel d'objets sans coder dans le framework.

Ici pour les mots-clés, nous utiliserons des fichiers Excel pour gérer les cas de test, et pour les données de test, nous pouvons utiliser les données, fournisseur de Tester cadre.

Cadre hybride

Ici, dans notre framework hybride, nous n'avons pas besoin de changer quoi que ce soit dans le framework piloté par mots-clés, ici nous devons simplement remplacer le fichier ExecuteTest.java par le fichier HybridExecuteTest.java.

Cadre hybride

Ce fichier HybridExecuteTest contient tout le code des mots clés basés sur le concept de fournisseur de données.

La représentation picturale complète du cadre hybride ressemblera à

Cadre hybride

HybridExecuteTest.java

package testCases;
import java.io.IOException;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class HybridExecuteTest {
    WebDriver webdriver = null;
@Test(dataProvider="hybridData")
    public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception {
        // TODO Auto-generated method stub
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    //Call perform function to perform operation on UI
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    object = new Object[rowCount][5];
    for (int i = 0; i < rowCount; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i+1);
        //Create a loop to print cell values in a row
        for (int j = 0; j < row.getLastCellNum(); j++) {
            //Print excel data in console
            object[i][j] = row.getCell(j).toString();
        }
    }
    System.out.println("");
     return object;    
    }
}

Résumé

  • Nous pouvons créer trois types de framework de test en utilisant Selenium Pilote Web.
  • A Selenium cadre d'automatisation qui peut être classé en cadres axés sur les données, axés sur les mots-clés et hybrides.
  • Nous pouvons réaliser un cadre basé sur les données en utilisant TestNGle fournisseur de données de.
  • Dans le framework basé sur les mots-clés, les mots-clés sont écrits dans certains fichiers externes comme le fichier Excel et le code Java appellera ce fichier et exécutera des cas de test.
  • Le cadre hybride est un mélange de cadre axé sur les mots clés et sur les données.

Télécharger Selenium Fichiers de projet pour la démo de ce didacticiel

Newsletter quotidienne de Guru99

Commencez votre journée avec les dernières et plus importantes actualités sur l'IA diffusées dès maintenant.