Création d'un cadre Selenium hybride, basé sur les données et les mots clés

Ce blog explique ce qu'est un framework Selenium, ses avantages et comment implémenter des frameworks Data Driven, Keyword Driven & Hybrid dans le sélénium.

La précédente dans cette série vous ont donné une exposition aux concepts de base des tests de sélénium.Cependant, dans ce blog, je vais vous dire comment utiliser un framework Selenium pour optimiser votre structure de code et cela vous rapprochera de devenir un .



Qu'est-ce qu'un framework Selenium?

Le framework Selenium est une structure de code pour simplifier la maintenance du code et améliorer la lisibilité du code. Un framework consiste à décomposer tout le code en morceaux de code plus petits, qui testent une fonctionnalité particulière.



Le code est structuré de telle sorte que «l'ensemble de données» soit séparé du «cas de test» réel qui testera la fonctionnalité de l'application Web. Il peut également être structuré de manière à ce que les cas de test qui doivent être exécutés soient appelés (invoqués) depuis une application externe (comme un .csv).

plan de suivi et de contrôle du projet

Il existe un certain nombre de frameworks, mais 3 framework (s) Selenium couramment utilisés sont:



Ces frameworks seront discutés avec une démo dans ce blog. Mais avant d'aller plus loin, laissez-moi vous dire pourquoi un framework Selenium doit être en place et quels avantages vous en tirerez.

Pourquoi avons-nous besoin d'un framework Selenium?

Sans un cadre en place, il y aura un cas de test qui comprendra toute la fonctionnalité de test. La partie effrayante est que ce cas de test unique a la capacité d'augmenter jusqu'à un million de lignes de code. Il est donc assez évident qu'un cas de test si énorme sera difficile à lire. Même si vous souhaitez modifier une fonctionnalité plus tard, vous aurez du mal à modifier le code.

Étant donné que la mise en œuvre d'un framework, se traduira par des morceaux de code plus petits mais multiples, il y a divers avantages.



Avantages du framework Selenium

  • Augmentation de la réutilisation du code
  • Meilleure lisibilité du code
  • Meilleure portabilité
  • Script réduitentretien

Maintenant que vous connaissez les bases des frameworks, laissez-moi vous expliquer chacun d'eux en détail.

Cadre basé sur les données

Un cadre basé sur les données dans Selenium est la technique de séparation de «l'ensemble de données» du «cas de test» réel (code). Ce cadre dépend entièrement des données de test d'entrée. Les données de test sont alimentées à partir de sources externes telles qu'un fichier Excel, un fichier .CSV ou toute base de données.

framework piloté par les données - framework selenium - edureka

Étant donné que le scénario de test est séparé de l'ensemble de données, nous pouvons facilement modifier le scénario de test d'une fonctionnalité particulière sans apporter de modifications globales à votre code. Par exemple, si vous souhaitez modifier le code pour la fonctionnalité de connexion, vous pouvez simplement modifier cela au lieu d'avoir à modifier également toute autre partie dépendante du même code.

En plus de cela, vous pouvez également contrôler facilement la quantité de données à tester. Vous pouvez facilement augmenter le nombre de paramètres de test en ajoutant plus de champs de nom d'utilisateur et de mot de passe au fichier Excel (ou à d'autres sources).

Par exemple, si je dois vérifier la connexion à une page Web, je peux conserver l'ensemble des informations d'identification du nom d'utilisateur et du mot de passe dans un fichier Excel et transmettre les informations d'identification au code pour effectuer l'automatisation sur le navigateur dans un fichier de classe Java distinct.

Utilisation d'Apache POI avec Selenium WebDriver

WebDriver ne prend pas directement en charge la lecture des fichiers Excel. Par conséquent, nous utilisons POI Apache pour lire / écrire dans n'importe quel document Microsoft Office. Vous pouvez télécharger Apache POI (ensemble de fichiers JAR) à partir de Ici . Téléchargez le fichier zip ou le fichier tar selon vos besoins et placez-les avec l'ensemble de JAR Selenium.

quelles sont les contraintes dans sql

La coordination entre le code principal et l'ensemble de données sera assurée par Fournisseurs de données TestNG, qui est une bibliothèque qui fait partie des fichiers JAR Apache POI. À des fins de démonstration, j'ai créé un fichier Excel appelé «LoginCredentials» dans lequel les noms d'utilisateur et les mots de passe ont été stockés dans différentes colonnes.

Jetez un œil au code ci-dessous pour comprendre le cas de test. Il s'agit d'un code simple pour tester la fonctionnalité de connexion d'une application de réservation de vol.

package DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test public class DDTExcel {ChromeDriver driver @Test (dataProvider = 'testdata') public void DemoProject (String username, String password) jette InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = nouveau ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('password') )). sendKeys (mot de passe) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ('Find a Flight: Mercury Tours: '),' Informations d'identification non valides ') System.out.println (' Connexion réussie ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] credentials = new Object [rows] [2] for (int i = 0i

Si vous avez remarqué ci-dessus, nous avons une méthode nommée «TestDataFeed ()». Dans cette méthode, j'ai créé une instance d'objet d'une autre classe nommée «ReadExcelFile». Lors de l'instanciation de cet objet, j'ai alimenté le chemin de mon fichier Excel contenant les données. J'ai en outre défini une boucle for pour récupérer le texte du classeur Excel.

Mais, pour lire les données à partir d'un numéro de feuille, numéro de colonne et numéro de ligne donnés, les appels sont faits à la classe «ReadExcelFile». Le code de mon «ReadExcelFile» est ci-dessous.

package DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFheet sheet public String ReadExcel excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public String getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

Notez d'abord les bibliothèques que j'ai importées. J'ai importé Apache POI XSSF bibliothèques qui sont utilisées pour lire / écrire des données dans des fichiers Excel. Ici, j'ai créé un constructeur (objet de la même méthode) pour passer les valeurs: numéro de feuille, numéro de ligne et numéro de colonne. Pour mieux comprendre ce cadre, je vous demande de parcourir la vidéo ci-dessous, où je l'ai expliqué de manière structurée.

Framework piloté par les données dans Selenium WebDriver | Tutoriel Selenium

Passons maintenant au framework, c'est-à-dire au framework basé sur les mots clés.

Cadre basé sur les mots clés

Le framework basé sur les mots-clés est une technique dans laquelle toutes les opérations et instructions à effectuer sont écrites séparément du cas de test réel. La similitude avec le framework Data Driven est que les opérations à effectuer sont à nouveau stockées dans un fichier externe comme une feuille Excel.

Les opérations dont je parle ne sont rien d’autre que les méthodes qui doivent être exécutées dans le cadre d’un scénario de test. L'avantage du framework basé sur les mots-clés est que vous pouvez facilement contrôler les fonctionnalités que vous souhaitez tester. Vous pouvez spécifier les méthodes qui testent la fonctionnalité de l'application dans le fichier Excel. Ainsi, seuls les noms de méthodes spécifiés dans Excel seront testés.

Par exemple, pour se connecter à l'application Web, nous pouvons écrire plusieurs méthodes dans le scénario de test principal, dans lequel chaque scénario de test testera certaines fonctionnalités. Pour instancier le pilote de navigateur, il pourrait y avoir une méthode, pour trouver les champs de nom d'utilisateur et de mot de passe, il pourrait y avoir des méthodes, pour naviguer vers une page Web, il pourrait y avoir une autre méthode, etc.

Jetez un œil au code ci-dessous pour comprendre à quoi ressemble le framework. Les lignes commentées dans le code ci-dessous servent d'explication si vous ne comprenez pas.

package KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver public class Actions {pilote WebDriver public statique public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = nouveau ChromeDriver ()} public static void naviguer () {pilote .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')). ​​Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Comme vous pouvez le voir, les différentes fonctionnalités à tester sont présentes dans des méthodes distinctes en attente d'être appelées. Désormais, ces méthodes seront appelées à partir d'une autre classe, en fonction de la présence du nom de la méthode dans le fichier Excel. Et de même, pour lire le fichier Excel et renvoyer les résultats, j'ai écrit une autre classe. Les deux sont affichés ci-dessous.

Le fichier de classe appelant les méthodes est le suivant.

comment faire des tests de base de données
package KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Déclaration du chemin du fichier Excel avec le nom du fichier Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Ici nous transmettons le chemin Excel et SheetName comme arguments pour se connecter avec le fichier Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Les valeurs codées en dur sont utilisées pour les lignes et colonnes Excel pour le moment // Les valeurs codées en dur sont utilisées pour la ligne Excel et colonnes pour le moment // Dans les chapitres suivants, nous remplacerons ces valeurs codées en dur par des varibales // Ceci est la boucle de lecture des valeurs de la colonne 3 (Action Keyword) ligne par ligne pour (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

Et le fichier de classe qui lit les valeurs Excel est le suivant.

package KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell classe publique ReadExcelData {statique privé XSSFSheet ExcelWSheet privé statique XSSFWorkbook ExcelWBook privé statique XSSFCell Cell // Cette méthode consiste à définir le chemin du fichier et à ouvrir le fichier Excel // Passer le chemin Excel et le nom de la feuille comme arguments à cette méthode public static void setExcelFile (String Path, String SheetName) throws Exception {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Cette méthode consiste à lire les données de test à partir de la cellule Excel // En cela, nous passons des paramètres / arguments as Row Num et Col Num public static String getCellData (int RowNum, int ColNum) throws Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Passons maintenant à la dernière partie de ce blog sur le framework Selenium, où je vais vous montrer comment créer un framework hybride.

Cadre hybride

Le framework hybride est une technique dans laquelle nous pouvons tirer le meilleur parti des framework (s) Selenium pilotés par les données et les mots-clés. En utilisant les exemples présentés ci-dessus dans ce blog, nous pouvons créer un framework hybride en stockant les méthodes à exécuter dans un fichier Excel (approche basée sur les mots clés) et en passant ces noms de méthodes au Classe de réflexion Java (approche basée sur les données) au lieu de créer un Sinon boucle dans la classe «DriverScript».

Jetez un œil à la classe «DriverScript» modifiée dans l'extrait de code ci-dessous.Ici, au lieu d'utiliser plusieurs boucles If / Else, une approche basée sur les données est utilisée pour lire les noms de méthode à partir du fichier Excel.

package HybridFramework import java.lang.reflect.Method classe publique DriverScriptJava {// Ceci est un objet de classe, déclaré comme 'public static' // Pour qu'il puisse être utilisé en dehors de la portée de la méthode main [] public static Actions actionKeywords public static String sActions // Ceci est un objet de classe de réflexion, déclaré comme 'public static' // Pour qu'il puisse être utilisé en dehors de la portée de la méthode main [] public static Méthode méthode [] public static void main (String [] args) lève une exception {// Déclarer le chemin du fichier Excel avec le nom du fichier Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Ici, nous passons le chemin Excel et SheetName pour se connecter avec le fichier Excel // Cette méthode a été créé précédemment ReadExcelData.setExcelFile (sPath, 'Sheet1') // Les valeurs codées en dur sont utilisées pour les lignes et colonnes Excel pour le moment // Plus tard, nous utiliserons ces valeurs codées en dur beaucoup plus efficacement // Ceci est la boucle de lecture les valeurs de la ligne de la colonne (mot-clé d'action) par ligne // Cela signifie que cette boucle exécutera toutes les étapes mentionnées pour le cas de test dans la feuille Étapes de test pour (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Pour mieux comprendre ce concept de frameworks pilotés par les données, les mots-clés et les hybrides, je vous demande de regarder la vidéo ci-dessous.

Framework Selenium utilisant Java | Tutoriel Selenium | Formation Selenium en ligne

J'espère que ce blog vous a été utile et vous a donné une compréhension claire de ce qu'est un framework Selenium, comment il est bénéfique et comment construire votre structure de code en utilisant ces 3 frameworks Selenium. Restez à l'écoute des autres blogs de cette série.

Si vous souhaitez apprendre Selenium et bâtir une carrière dans le domaine des tests, consultez notre site interactif en ligne ici, cela vient avec un support 24 * 7 pour vous guider tout au long de votre période d'apprentissage. Les concepts liés à 'Selenium Framework' ont une couverture approfondie dans le cours d'Edureka.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.