Qu'est-ce que Selenium Framework?
Le Framework Selenium est une structure de code qui rend la maintenance du code simple et efficace. Sans cadres, 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 portabilité plus élevée, un coût réduit de maintenance des scripts, une meilleure lisibilité du code, etc.
Il existe principalement trois types de frameworks créés par Selenium WebDriver pour automatiser les cas de test manuels
- Framework de test piloté par les données
- Framework de test piloté par mots-clés
- Framework de test hybride
Framework basé sur les données dans Selenium
Data Driven Framework dans Selenium est une méthode de séparation des ensembles de données du scénario de test. Une fois que les ensembles de données sont séparés du cas de test, il peut être facilement modifié 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 comme Excel, .csv, .xml ou certaines tables de base de données.
Pour lire ou écrire un Excel, Apache met à disposition une très célèbre bibliothèque de POI. Cette bibliothèque est suffisamment capable de lire et d'écrire les formats de fichier XLS et XLSX d'Excel.
Pour lire les fichiers XLS , une implémentation HSSF est fournie par la bibliothèque POI.
Pour lire XLSX, l' implémentation XSSF de la librairie POI sera le choix. Étudions ces implémentations en détail.
Nous avons déjà appris les tests pilotés par les données dans notre précédent tutoriel
Framework basé sur les mots-clés dans Selenium
Le framework 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
Comme vous pouvez le voir, c'est un cadre en 5 étapes. Étudions-le pas à pas 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 -
- 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é «Cliquez». Maintenant, l'AUT peut avoir des centaines de boutons sur une page, pour identifier un bouton de connexion, dans Excel, nous entrerons le nom de l'objet comme loginButton 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ément (comme Xpath, nom, chemin CSS, nom de classe, etc.)
- 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 a une méthode getObjectRepository pour le lire.
REMARQUE: vous vous demandez peut-être pourquoi nous devons créer un référentiel d'objets. La réponse aide à la maintenance du code. Par exemple, nous utilisons le bouton avec nom = 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 effectuer un changement dans les 10 cas de test. Dans le cas d'un référentiel d'objets, vous n'effectuerez la modification qu'une seule fois dans le référentiel.
Étape 5)
- Le pilote transmettra les données d'Excel & Object Repository à la classe UIOperation
- La classe UIOperation a des fonctions pour effectuer des actions correspondant à des mots-clés comme CLICK, SETTEXT etc… mentionnés dans le fichier excel
- La classe UIOperation est une classe Java qui a l'implémentation réelle du code pour effectuer des opérations sur des éléments Web
Le projet complet ressemblera à-
Regardons un exemple:
Scénario de test
- Nous exécutons 2 cas de test
- Cas de test 1:
- Aller à http://demo.guru99.com/V4/
- Entrez l'ID utilisateur
- Entrer le mot de passe
- Cliquez sur Réinitialiser
- Cas de test 2:
- Aller à http://demo.guru99.com/V4/
- Entrez l'ID utilisateur
- Entrer le mot de passe
- Cliquez sur Connexion
object.properties
url = http: //demo.guru99.com/V4/
nom d'utilisateur = uid
mot de passe = mot de passe
titre = 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;classe publique ReadGuru99ExcelFile {Public Sheet readExcel (String filePath, String fileName, String sheetName) jette IOException {// Créer un objet de la classe File pour ouvrir le fichier xlsxFile file = nouveau fichier (filePath + "\\" + fileName);// Créer un objet de la classe FileInputStream pour lire le fichier ExcelFileInputStream inputStream = nouveau FileInputStream (fichier);Workbook guru99Workbook = null;// Trouvez l'extension du fichier en divisant le nom du fichier dans le sous-système et en obtenant uniquement le nom de l'extensionString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Vérifier la condition si le fichier est un fichier xlsxif (fileExtensionName.equals (". xlsx")) {// S'il s'agit d'un fichier xlsx, créez un objet de la classe XSSFWorkbookguru99Workbook = nouveau XSSFWorkbook (inputStream);}// Vérifier la condition si le fichier est un fichier xlselse if (fileExtensionName.equals (". xls")) {// S'il s'agit d'un fichier xls, créez un objet de la classe XSSFWorkbookguru99Workbook = nouveau HSSFWorkbook (inputStream);}// Lire la feuille à l'intérieur du classeur par son nomFeuille guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}
ReadObject.java
opération de paquet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;Classe publique ReadObject {Propriétés p = nouvelles propriétés ();Propriétés publiques getObjectRepository () lève IOException {// Lire le fichier du référentiel d'objetsInputStream stream = new FileInputStream (new File (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// charge tous les objetsp.load (flux);retour p;}}
UIOperation.java
opération de paquet;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;UIOperation de classe publique {Pilote WebDriver;public UIOperation (pilote WebDriver) {this.driver = pilote;}public void perform (Propriétés p, opération de chaîne, nom d'objet de chaîne, type d'objet de chaîne, valeur de chaîne) lève l'exception {System.out.println ("");commutateur (opération.toUpperCase ()) {cas "CLIQUEZ":// Effectuer un clicdriver.findElement (this.getObject (p, objectName, objectType)). click ();Pause;case "SETTEXT":// Définir le texte sur le contrôledriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (valeur);Pause;cas "GOTOURL":// Récupère l'url de l'applicationdriver.get (p.getProperty (valeur));Pause;cas "GETTEXT":// Récupère le texte d'un élémentdriver.findElement (this.getObject (p, objectName, objectType)). getText ();Pause;défaut:Pause;}}/ *** Trouver l'élément BY en utilisant le type d'objet et la valeur* @param p* @param objectName* @param objectType* @revenir* @throws Exception* /private By getObject (Properties p, String objectName, String objectType) lève une exception {// Recherche par xpathif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}// recherche par classeelse if (objectType.equalsIgnoreCase ("CLASSNAME")) {return By.className (p.getProperty (objectName));}// recherche par nomelse if (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}// Recherche par csselse if (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}// recherche par lienelse if (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}// recherche par lien partielelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}autre{throw new Exception ("Type d'objet incorrect");}}}
ExecuteTest.java
package testCases;import java.util.Properties;opération d'importation.ReadObject;opération d'importation.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;classe publique ExecuteTest {@Testpublic void testLogin () lève une exception {// TODO Stub de méthode généré automatiquementWebDriver webdriver = nouveau FirefoxDriver ();Fichier ReadGuru99ExcelFile = nouveau ReadGuru99ExcelFile ();Objet ReadObject = nouveau ReadObject ();Propriétés allObjects = object.getObjectRepository ();Opération UIOperation = nouvelle UIOperation (webdriver);// Lire la feuille de mots-clésFeuille guru99Sheet = fichier.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Trouver le nombre de lignes dans le fichier Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Crée une boucle sur toutes les lignes du fichier Excel pour le lirepour (int i = 1; i" + row.getCell (0) .toString () + "Démarré");}}}}
Après l'exécution, la sortie ressemblera à -
Téléchargez les fichiers de projet Selenium pour la démonstration dans ce didacticiel
Cadre hybride
Le framework hybride dans Selenium est un concept dans lequel nous utilisons l'avantage à la fois du framework piloté par mots-clés et du framework piloté par les données. C'est 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 codage dans le framework.
Ici pour les mots-clés, nous utiliserons des fichiers Excel pour maintenir les cas de test, et pour les données de test, nous pouvons utiliser des données, fournisseur du framework Testng.
Ici, dans notre cadre hybride, nous n'avons pas besoin de changer quoi que ce soit dans le cadre piloté par mot-clé, ici nous avons juste besoin de remplacer le fichier ExecuteTest.java par le fichier HybridExecuteTest.java.
Ce fichier HybridExecuteTest contient tout le code pour le mot clé piloté avec le concept de fournisseur de données.
La représentation picturale complète du cadre hybride ressemblera à
HybridExecuteTest.java
package testCases;import java.io.IOException;import java.util.Properties;opération d'importation.ReadObject;opération d'importation.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;classe publique HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) lève l'exception {// TODO Stub de méthode généré automatiquementif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = nouveau FirefoxDriver ();}Objet ReadObject = nouveau ReadObject ();Propriétés allObjects = object.getObjectRepository ();Opération UIOperation = nouvelle UIOperation (webdriver);// Appelez la fonction perform pour effectuer une opération sur l'interface utilisateuroperation.perform (tous les objets, mot-clé, nom de l'objetobjectType, valeur);}@DataProvider (nom = "hybridData")Public Object [] [] getDataFromDataprovider () lève IOException {Object [] [] object = null;Fichier ReadGuru99ExcelFile = nouveau ReadGuru99ExcelFile ();// Lire la feuille de mots-clésFeuille guru99Sheet = fichier.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Trouver le nombre de lignes dans le fichier Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();object = nouvel objet [rowCount] [5];pour (int i = 0; iRésumé:
- Nous pouvons créer trois types de framework de test à l'aide de Selenium WebDriver.
- Il s'agit du framework de test basé sur les données, basé sur les mots clés et hybride.
- Nous pouvons réaliser un cadre basé sur les données en utilisant le fournisseur de données de TestNG.
- Dans le cadre 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échargez les fichiers de projet Selenium pour la démonstration dans ce didacticiel