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

⚡ Résumé intelligent

Selenium Cadres de référence : Les approches pilotées par les données, par mots-clés et hybrides définissent la manière dont les testeurs organisent le code d’automatisation, séparent les données de test et réutilisent la logique. Cet article explique chaque type de cadre, son architecture, ses avantages et comment les implémenter étape par étape avec des exemples pratiques. Selenium Exemples de code WebDriver.

  • Définition principale : A Selenium Le framework est une architecture de code structurée qui améliore la réutilisabilité, la portabilité et la maintenance des scripts de test automatisés.
  • (I.e. Mise en œuvre axée sur les données : Séparez les données de test de la logique en utilisant Excel, CSV ou XML, et lisez les entrées via Apache POI (HSSF pour XLS, XSSF pour XLSX).
  • (I.e. Conception axée sur les mots clés : Pilotez les actions d'interface utilisateur via des feuilles de mots clés et des référentiels d'objets afin que les testeurs manuels puissent créer des cas sans écrire de code. Java code.
  • ⚙️ Optimisation hybride : Combiner TestNG Les fournisseurs de données avec exécution par mots-clés permettent de gagner en flexibilité, en évolutivité et de réduire les coûts de maintenance des scripts.
  • 🧩 Avantage du référentiel d'objets : Centralisez les localisateurs dans un fichier de propriétés afin que les modifications d'éléments ne nécessitent la mise à jour que d'un seul emplacement pour tous les cas de test.

Selenium FrameworkTA

Qu'est-ce que le Selenium Cadre?

Le Selenium Cadre d'automatisation Il s'agit d'une architecture de code structurée qui simplifie, optimise et rend plus évolutive la maintenance des tests. Sans framework, les testeurs placent souvent le code et les données au même endroit, ce qui les rend difficilement réutilisables et lisibles. L'adoption d'un framework apporte des avantages concrets : une meilleure réutilisabilité du code, une portabilité accrue, des coûts de maintenance des scripts réduits, une lisibilité améliorée et une séparation plus claire des responsabilités entre la logique de test et les données d'entrée.

Pourquoi utiliser un Selenium Cadre d'automatisation ?

Un bien conçu Selenium Ce framework résout trois problèmes récurrents en automatisation des tests : la duplication de code, la fragilité des localisateurs et la difficulté à gérer les données de test. En imposant une structure claire, les équipes peuvent faire évoluer leurs suites de tests, de quelques scripts à plusieurs centaines, sans perdre le contrôle.

  • Maintenabilité: Les localisateurs centralisés et les méthodes d'assistance permettent de mettre à jour automatiquement tous les tests utilisant cet élément.
  • Réutilisabilité: Les opérations courantes telles que la connexion, la navigation ou la saisie de formulaires sont écrites une seule fois et invoquées dans de nombreux cas de test.
  • Évolutivité: L'ajout de nouveaux cas de test devient une mise à jour des données plutôt qu'une tâche de codage, ce qui permet aux non-développeurs de contribuer aux scénarios.
  • Signalement et collaboration : Sa structure standardisée facilite l'intégration avec les outils de reporting, les pipelines CI/CD et le contrôle de version.

Types d' Selenium FrameworkTA

Il existe trois principaux types de cadres construite sur Selenium WebDriver permet d'automatiser les cas de test manuels. Chaque style vise un équilibre différent entre l'effort du développeur, l'implication du testeur et la flexibilité des données.

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

Types d' Selenium FrameworkTA

Les sections suivantes expliquent chaque cadre en détail, en commençant par l'approche la plus simple, axée sur les données, et en progressant jusqu'au modèle hybride le plus flexible.

Cadre basé sur les données dans Selenium

Cadre basé sur les données dans Selenium est une méthode permettant de séparer les ensembles de données de test de la logique des cas de test. Une fois les données découplées, vous pouvez modifier les entrées d'une fonctionnalité particulière sans toucher au code de test. Cette méthode est couramment utilisée pour récupérer des cas de test et des suites de tests à partir de sources externes telles que… Excel, .csv, .xml ou tables de bases de données.

Cadre basé sur les données dans Selenium

Pour lire ou écrire des fichiers Excel, Apache fournit la bibliothèque POI, bien connue. Cette bibliothèque peut gérer les deux types de fichiers. XLS et XLSX formatage. Les CSSS L'implémentation lit les fichiers XLS hérités, tandis que le XSSF Cette implémentation prend en charge les fichiers XLSX modernes.

Nous avons déjà abordé les 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 Cette méthode accélère l'automatisation en séparant les mots-clés des fonctions et instructions courantes. Toutes les opérations et instructions sont écrites dans un fichier externe, généralement une feuille Excel. Les testeurs peuvent ainsi spécifier les fonctionnalités à valider sans modifier le code source. Java Ce style de code est donc idéal pour les équipes où les analystes métier ou les équipes d'assurance qualité manuelle contribuent aux définitions de tests.

Voici à quoi ressemble le cadre complet :

Cadre basé sur les mots clés dans Selenium

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

Étape 1)

  • Le script pilote Execute.java appelle ReadGuru99ExcelFile.java.
  • LireGuruLe fichier 99ExcelFile.java contient le code POI qui lit les données à partir d'Excel.

Étape 2)

  • LireGuru99ExcelFile.java lit les données du fichier TestCase.xlsx.
  • Voici à quoi ressemble la feuille :

Feuille Excel du cadre piloté par mots-clés dans Selenium

  • En fonction des mots-clés inscrits dans le fichier Excel, le système effectue l'action correspondante sur l'interface utilisateur.
  • Par exemple, pour cliquer sur un bouton intitulé « Connexion », la feuille Excel enregistre le mot-clé « Clic ». Afin d'identifier ce bouton parmi plusieurs sur une page, la ligne Excel définit le nom de l'objet comme « loginButton » et son type comme « nom » (voir la ligne mise en évidence dans l'image). Le type d'objet peut également être XPath, CSS, une classe ou toute autre méthode de localisation.

Étape 3) LireGuru99ExcelFile.java renvoie les données analysées au script pilote Execute.java.

Étape 4)

  • Pour tous les éléments d'interface utilisateur web, vous gérez un référentiel d'objets qui stocke les localisateurs d'éléments tels que XPath, le nom, le CSS ou le nom de classe.

Référentiel d'objets dans un framework piloté par mots-clés

  • Le script Execute.java (le script principal) lit l'intégralité du référentiel d'objets et le stocke dans une variable.
  • Une classe auxiliaire ReadObject expose une méthode getObjectRepository qui charge le référentiel lors de l'exécution.

Classe d'assistance ReadObject pour le framework piloté par mots-clés

NOTE: Vous vous demandez peut-être pourquoi un dépôt d'objets est nécessaire. La réponse est simple : la maintenabilité. Si un bouton nommé « btnlogin » est utilisé dans 10 cas de test et que le développeur le renomme en « submit », il faudrait modifier 10 fichiers. Avec un dépôt d'objets, la modification du nom de bouton se fait à un seul endroit.

Étape 5)

  • Le pilote transmet les données d'Excel et du référentiel d'objets à l'interface utilisateur.Operaclasse de tion.
  • UIOperation contient des fonctions qui associent chaque mot-clé, tel que CLICK et SETTEXT, à une action WebDriver concrète.
  • UIOperation est une Java classe qui contient l'implémentation réelle permettant d'interagir avec les éléments web.

UIOperaclasse tion dans le cadre piloté par mots clés

La structure complète du projet ressemble à ceci :

Structure complète du projet du cadre piloté par mots-clés

Prenons un exemple concret :

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

LireGuru99ExcelFile.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 File object to open the xlsx file
        File file = new File(filePath + "\\" + fileName);
        // Create a FileInputStream to read the Excel file
        FileInputStream inputStream = new FileInputStream(file);
        Workbook guru99Workbook = null;
        // Detect the file extension
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if (fileExtensionName.equals(".xlsx")) {
            guru99Workbook = new XSSFWorkbook(inputStream);
        } else if (fileExtensionName.equals(".xls")) {
            guru99Workbook = new HSSFWorkbook(inputStream);
        }
        // Read the 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 the 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":
                driver.findElement(this.getObject(p, objectName, objectType)).click();
                break;
            case "SETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
                break;
            case "GOTOURL":
                driver.get(p.getProperty(value));
                break;
            case "GETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).getText();
                break;
            default:
                break;
        }
    }

    private By getObject(Properties p, String objectName, String objectType) throws Exception {
        if (objectType.equalsIgnoreCase("XPATH")) {
            return By.xpath(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CLASSNAME")) {
            return By.className(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("NAME")) {
            return By.name(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CSS")) {
            return By.cssSelector(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("LINK")) {
            return By.linkText(p.getProperty(objectName));
        } 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 {
        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 the number of rows in the Excel file
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        for (int i = 1; i < rowCount + 1; i++) {
            Row row = guru99Sheet.getRow(i);
            if (row.getCell(0).toString().length() == 0) {
                System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
                        row.getCell(3).toString() + "----" + row.getCell(4).toString());
                operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                        row.getCell(3).toString(), row.getCell(4).toString());
            } else {
                System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
            }
        }
    }
}

Après exécution, le résultat ressemble à ceci :

Résultat d'exécution du framework piloté par mots-clés

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

Cadre hybride

Cadre hybride in Selenium Ce modèle combine les atouts des frameworks pilotés par mots-clés et par données. Simple d'utilisation, il permet aux testeurs manuels de créer des cas de test en modifiant simplement les mots-clés, les données de test et le référentiel d'objets, sans écrire une seule ligne de code.

Ici, les fichiers Excel conservent les mots-clés de chaque étape, et TestNG's fournisseur de données fournit les données de test. Cette séparation permet de faire varier indépendamment le vocabulaire d'actions et les variations d'entrée.

Architecture de cadre hybride pilotée

Pour notre framework hybride, rien ne change dans la structure pilotée par mots-clés : nous remplaçons simplement ExecuteTest.java par HybridExecuteTest.java.

Remplacement des composants du cadre hybride

Ce fichier HybridExecuteTest contient la logique complète pilotée par mots-clés combinée à TestNGmécanisme de fournisseur de données de .

La représentation graphique complète du cadre hybride ressemble à ceci :

Représentation complète du cadre de conduite 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 {
        if (testcaseName != null && testcaseName.length() != 0) {
            webdriver = new FirefoxDriver();
        }
        ReadObject object = new ReadObject();
        Properties allObjects = object.getObjectRepository();
        UIOperation operation = new UIOperation(webdriver);
        operation.perform(allObjects, keyword, objectName, objectType, value);
    }

    @DataProvider(name = "hybridData")
    public Object[][] getDataFromDataprovider() throws IOException {
        Object[][] object = null;
        ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
        Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        object = new Object[rowCount][5];
        for (int i = 0; i < rowCount; i++) {
            Row row = guru99Sheet.getRow(i + 1);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                object[i][j] = row.getCell(j).toString();
            }
        }
        System.out.println("");
        return object;
    }
}

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

FAQ

Choisissez l'option « Pilotage par mots-clés » lorsque les testeurs manuels doivent créer des cas sans écrire de code. Choisissez l'option « Pilotage par données » lorsque le même script doit être exécuté sur de nombreuses variations d'entrée. Utilisez l'option « Hybride » lorsque vous avez besoin à la fois de flexibilité au niveau des données et de la création de tests par mots-clés.

Apache POI lit et écrit les fichiers Excel utilisés comme source de données. HSSF gère les fichiers .xls classiques, tandis que XSSF traite les fichiers .xlsx modernes. Ensemble, ils permettent à vos scripts de test d'extraire des données dynamiques de feuilles de calcul sans avoir à les coder en dur.

Un référentiel d'objets centralise les localisateurs d'éléments tels que XPath, CSS ou le nom. Si un développeur renomme un contrôle d'interface utilisateur, il suffit de mettre à jour une seule entrée au lieu de chaque cas de test, ce qui réduit considérablement le temps de maintenance et le risque de scripts défectueux.

L'IA s'améliore Selenium Grâce à des localisateurs autoréparateurs, une priorisation intelligente des tests et une validation visuelle, les frameworks offrent une solution performante. Les moteurs d'IA détectent la dérive des localisateurs, recommandent des sélecteurs stables et analysent les schémas d'échec, garantissant ainsi la fiabilité des suites de tests hybrides malgré l'évolution de l'application testée.

Oui. Les assistants IA modernes analysent l'application testée et proposent des bibliothèques de mots clés, des exemples d'entrées et des cas limites. Les testeurs examinent et affinent ces suggestions, ce qui accélère la configuration du framework tout en maintenant…ping Supervision humaine de la logique de validation critique.

Résumez cet article avec :