Selenium Automation Framework: bazat pe date, bazat pe cuvinte cheie & Hibrid

Cuprins:

Anonim

Ce este Selenium Framework?

Cadrul Seleniul este o structură de cod care face ușor și eficient de întreținere cod. Fără cadre, utilizatorii pot plasa „codul” și „datele” în aceeași locație care nu este nici reutilizabilă, nici citibilă. Cadrele produc rezultate benefice, cum ar fi reutilizarea sporită a codului, portabilitate mai mare, costuri reduse de întreținere a scriptului, o mai bună lizibilitate a codului etc.

Există în principal trei tipuri de cadre create de Selenium WebDriver pentru automatizarea cazurilor de testare manuale

  • Cadru de testare bazat pe date
  • Cadru de testare bazat pe cuvinte cheie
  • Cadrul de testare hibrid

Cadru bazat pe date în seleniu

Data Driven Framework în Selenium este o metodă de separare a seturilor de date de cazul testului. Odată ce seturile de date sunt separate de cazul de testare, acesta poate fi ușor modificat pentru o funcționalitate specifică, fără a modifica codul. Este folosit pentru preluarea cazurilor de testare și a suitelor din fișiere externe precum Excel, .csv, .xml sau unele tabele de baze de date.

Pentru a citi sau scrie un Excel, Apache oferă o bibliotecă foarte renumită POI. Această bibliotecă este suficient de capabilă să citească și să scrie atât formatul de fișier XLS, cât și formatul XLSX din Excel.

Pentru a citi fișiere XLS , o implementare HSSF este furnizată de biblioteca POI.

Pentru a citi XLSX, implementarea XSSF a bibliotecii POI va fi alegerea. Să studiem în detaliu aceste implementări.

Am aflat deja despre testarea bazată pe date în tutorialul nostru anterior

Cadru bazat pe cuvinte cheie în seleniu

Keyword Driven Framework în Selenium este o metodă utilizată pentru accelerarea testării automate prin separarea cuvintelor cheie pentru un set comun de funcții și instrucțiuni. Toate operațiunile și instrucțiunile care trebuie efectuate sunt scrise într-un fișier extern, cum ar fi o foaie Excel. Utilizatorii pot controla și specifica cu ușurință funcționalitățile pe care doresc să le testeze.

Iată cum arată cadrul complet

După cum puteți vedea, este un cadru în 5 pași. Să-l studiem în detaliu treptat

Pasul 1)

  • Scriptul driverului Execute.java va apela ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java are script POI pentru a citi date dintr-un Excel

Pasul 2)

  • ReadGuru99ExcelFile.java va citi datele din TestCase.xlsx
  • Iată cum arată foaia-
  • Conform cuvintelor cheie scrise în fișierul Excel, cadrul va efectua operația pe UI.
  • De exemplu, trebuie să facem clic pe butonul „Autentificare”. În mod corespunzător, Excel-ul nostru va avea un cuvânt cheie „Faceți clic”. Acum, AUT poate avea sute de butoane pe o pagină, pentru a identifica un buton de autentificare, în Excel vom introduce numele obiectului ca buton de conectare și tipul obiectului ca nume (vezi rândul evidențiat în imaginea de mai sus). Tipul de obiect poate fi Xpath, nume CSS sau orice altă valoare

Pasul 3) ReadGuru99ExcelFile.java va transmite aceste date scriptului driver Execute.java

Pasul 4)

  • Pentru toate elementele noastre de interfață UI, trebuie să creăm un depozit de obiecte în care vom plasa localizatorul lor de elemente (cum ar fi Xpath, nume, calea CSS, numele clasei etc.)
  • Execute.java (scriptul nostru de driver) va citi întregul depozit de obiecte și îl va stoca într-o variabilă
  • Pentru a citi acest depozit de obiecte, avem nevoie de o clasă ReadObject care are o metodă getObjectRepository pentru ao citi.

NOTĂ: Vă puteți gândi de ce trebuie să creăm un depozit de obiecte. Răspunsul ajută la întreținerea codului. De exemplu, folosim butonul cu nume = btnlogin în 10 cazuri de testare diferite. În viitor, dezvoltatorul decide să schimbe numele din btnlogin pentru a-l trimite. Va trebui să faceți o modificare în toate cele 10 cazuri de testare. În cazul unui depozit de obiecte, veți efectua modificarea o singură dată în depozit.

Pasul 5)

  • Driverul va transmite datele din Excel & Object Repository către clasa UIOperation
  • Clasa UIOperation are funcții pentru a efectua acțiuni corespunzătoare cuvintelor cheie precum CLICK, SETTEXT etc ... menționate în excel
  • Clasa UIOperation este o clasă Java care are implementarea efectivă a codului pentru a efectua operațiuni pe elemente web

Proiectul complet va arăta ca-

Să analizăm un exemplu:

Scenariu de testare

  • Executăm 2 cazuri de testare
  • Testul 1:
  • Mergeți la http://demo.guru99.com/V4/
  • Introduceți ID-ul utilizatorului
  • Introdu parola
  • Faceți clic pe Resetare
  • Testul 2:
  • Mergeți la http://demo.guru99.com/V4/
  • Introduceți ID-ul utilizatorului
  • Introdu parola
  • Faceți clic pe Conectare

obiect.proprietati

url = http: //demo.guru99.com/V4/

nume de utilizator = uid

parola = parola

titlu = barone

loginButton = btnLogin

resetButton = btnReset

ReadGuru99ExcelFile.java

pachet 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;clasă publică ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) aruncă IOException {// Creați un obiect din clasa File pentru a deschide fișierul xlsxFile file = new File (filePath + "\\" + fileName);// Creați un obiect din clasa FileInputStream pentru a citi fișierul ExcelFileInputStream inputStream = nou FileInputStream (fișier);Workbook guru99Workbook = nul;// Găsiți extensia de fișier împărțind numele fișierului în substing și obținând doar numele extensieiString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Verificați condiția dacă fișierul este fișier xlsxif (fileExtensionName.equals (". xlsx")) {// Dacă este fișier xlsx, atunci creați obiectul clasei XSSFWorkbookguru99Workbook = new XSSFWorkbook (inputStream);}// Verificați condiția dacă fișierul este fișier xlselse if (fileExtensionName.equals (". xls")) {// Dacă este fișier xls, atunci creați obiectul clasei XSSFWorkbookguru99Workbook = nou HSSFWorkbook (inputStream);}// Citiți foaia din registrul de lucru după numele săuFoaie guru99Sheet = guru99Workbook.getSheet (sheetName);returnează guru99Sheet;}}

ReadObject.java

operare pachet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;clasă publică ReadObject {Proprietăți p = proprietăți noi ();proprietăți publice getObjectRepository () aruncă IOException {// Citiți fișierul depozit de obiecteInputStream stream = new FileInputStream (new File (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// încărcați toate obiectelep.load (flux);retur p;}}

UIOperation.java

operare pachet;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;UIOperation public class {Driver WebDriver;UIOperation public (driver WebDriver) {this.driver = driver;}public void perform (Proprietăți p, operație șir, șir nume obiect, șir tip obiect, valoare șir) aruncă excepție {System.out.println ("");switch (operation.toUpperCase ()) {cazul „CLICK”:// Efectuați clicdriver.findElement (this.getObject (p, objectName, objectType)). click ();pauză;cazul „SETTEXT”:// Setați textul pe controldriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (valoare);pauză;cazul „GOTOURL”:// Obțineți adresa URL a aplicațieidriver.get (p.getProperty (valoare));pauză;cazul „GETTEXT”:// Obțineți textul unui elementdriver.findElement (this.getObject (p, objectName, objectType)). getText ();pauză;Mod implicit:pauză;}}/ *** Găsiți elementul BY folosind tipul și valoarea obiectului* @param p* @param objectName* @param objectType* @întoarcere* Excepție @throws* /private Prin getObject (Proprietăți p, String obiectNume, String obiectTip) aruncă Excepție {// Găsește după xpathif (objectType.equalsIgnoreCase ("XPATH")) {returnează By.xpath (p.getProperty (objectName));}// gaseste dupa clasaelse if (objectType.equalsIgnoreCase ("CLASSNAME")) {returnează By.className (p.getProperty (objectName));}// găsi după numeelse if (objectType.equalsIgnoreCase ("NAME")) {returnează By.name (p.getProperty (objectName));}// Găsiți prin csselse if (objectType.equalsIgnoreCase ("CSS")) {returnează By.cssSelector (p.getProperty (objectName));}// gaseste dupa linkelse if (objectType.equalsIgnoreCase ("LINK")) {returnează By.linkText (p.getProperty (objectName));}// găsiți prin link parțialelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {returnează By.partialLinkText (p.getProperty (objectName));} altfel{aruncă o excepție nouă („Tip de obiect greșit”);}}}

ExecuteTest.java

pachet testCazuri;import java.util.Properties;operațiune de import.ReadObject;operațiune de import.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 {@Testpublic void testLogin () aruncă Excepție {// TODO Metoda generată automatWebDriver webdriver = nou FirefoxDriver ();ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();ReadObject obiect = nou ReadObject ();Proprietăți allObjects = object.getObjectRepository ();Operațiune UIOperation = UIOperation nouă (webdriver);// Citiți foaia de cuvinte cheieFoaie guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Găsiți numărul de rânduri în fișierul Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Creați o buclă peste toate rândurile fișierului Excel pentru ao citifor (int i = 1; i " + row.getCell (0) .toString () + "Started");}}}}

După executare, ieșirea va arăta ca -

Descărcați fișierele proiectului Selenium pentru demonstrație în acest tutorial

Cadrul hibrid

Cadrul hibrid în seleniu este un concept în care folosim atât avantajul cadrului bazat pe cuvinte cheie, cât și al cadrului bazat pe date. Este un cadru ușor de utilizat, care permite testerilor manuali să creeze cazuri de testare uitându-se doar la cuvintele cheie, datele de testare și depozitul de obiecte, fără a codifica în cadru.

Aici, pentru cuvinte cheie, vom folosi fișiere Excel pentru a menține cazuri de testare, iar pentru date de testare, putem folosi date, furnizor de cadru Testng.

Aici, în cadrul nostru hibrid, nu este nevoie să schimbăm nimic în cadrul bazat pe cuvinte cheie, aici trebuie doar să înlocuim fișierul ExecuteTest.java cu fișierul HybridExecuteTest.java.

Acest fișier HybridExecuteTest conține tot codul pentru cuvinte cheie bazat pe conceptul de furnizor de date.

Va arăta reprezentarea picturală completă a cadrului hibrid

HybridExecuteTest.java

pachet testCazuri;import java.io.IOException;import java.util.Properties;operațiune de import.ReadObject;operațiune de import.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 = nul;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) throws Exception {// TODO Metoda generată automatif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = nou FirefoxDriver ();}ReadObject obiect = nou ReadObject ();Proprietăți allObjects = object.getObjectRepository ();Operațiune UIOperation = UIOperation nouă (webdriver);// Funcția de efectuare a apelului pentru a efectua operația pe interfața de utilizareoperation.perform (allObjects, keyword, objectName,objectType, valoare);}@DataProvider (name = "hybridData")Public Object [] [] getDataFromDataprovider () aruncă IOException {Obiect [] [] obiect = nul;ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();// Citiți foaia de cuvinte cheieFoaie guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Găsiți numărul de rânduri în fișierul Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();object = new Object [rowCount] [5];for (int i = 0; i 

Rezumat:

  • Putem crea trei tipuri de cadru de testare folosind Selenium WebDriver.
  • Acestea sunt cadrul de testare bazat pe date, bazat pe cuvinte cheie și hibrid.
  • Putem realiza un cadru bazat pe date folosind furnizorul de date TestNG.
  • În cadrul bazat pe cuvinte cheie, cuvintele cheie sunt scrise în unele fișiere externe, cum ar fi fișierul Excel, iar codul Java va apela acest fișier și va executa cazuri de testare.
  • Cadrul hibrid este un mix de cadru bazat pe cuvinte cheie și cadru bazat pe date.

Descărcați fișierele proiectului Selenium pentru demonstrație în acest tutorial