Selenium Automation Framework: basato sui dati, basato sulle parole chiave e amp; Ibrido

Sommario:

Anonim

Cos'è Selenium Framework?

Il Selenium Framework è una struttura di codice che rende la manutenzione del codice facile ed efficiente. Senza framework, gli utenti possono posizionare il "codice" e i "dati" nella stessa posizione che non è né riutilizzabile né leggibile. I framework producono risultati vantaggiosi come maggiore riusabilità del codice, maggiore portabilità, riduzione dei costi di manutenzione degli script, migliore leggibilità del codice, ecc.

Esistono principalmente tre tipi di framework creati da Selenium WebDriver per automatizzare i casi di test manuali

  • Framework di test basato sui dati
  • Framework di test basato su parole chiave
  • Framework di test ibrido

Framework basato sui dati in selenio

Data Driven Framework in Selenium è un metodo per separare i set di dati dal test case. Una volta che i set di dati sono separati dal test case, possono essere facilmente modificati per una funzionalità specifica senza modificare il codice. Viene utilizzato per recuperare test case e suite da file esterni come Excel, .csv, .xml o alcune tabelle di database.

Per leggere o scrivere un Excel, Apache fornisce una famosissima libreria di POI. Questa libreria è in grado di leggere e scrivere file in formato XLS e XLSX di Excel.

Per leggere i file XLS , viene fornita un'implementazione HSSF dalla libreria POI.

Per leggere XLSX, l' implementazione XSSF della libreria POI sarà la scelta. Studiamo queste implementazioni in dettaglio.

Abbiamo già imparato a conoscere i test basati sui dati nel nostro tutorial precedente

Quadro basato su parole chiave in selenio

Keyword Driven Framework in Selenium è un metodo utilizzato per accelerare i test automatizzati separando le parole chiave per un insieme comune di funzioni e istruzioni. Tutte le operazioni e le istruzioni da eseguire sono scritte in qualche file esterno come un foglio Excel. Gli utenti possono facilmente controllare e specificare le funzionalità che desiderano testare.

Ecco come appare il framework completo

Come puoi vedere è un framework in 5 fasi. Studiamolo gradualmente in dettaglio

Passo 1)

  • Lo script del driver Execute.java chiamerà ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java ha uno script POI per leggere i dati da un Excel

Passo 2)

  • ReadGuru99ExcelFile.java leggerà i dati da TestCase.xlsx
  • Ecco come appare il foglio:
  • Secondo le parole chiave scritte nel file Excel, il framework eseguirà l'operazione sull'interfaccia utente.
  • Ad esempio, dobbiamo fare clic su un pulsante "Accedi". Di conseguenza, il nostro Excel avrà una parola chiave "Clic". Ora l'AUT può avere centinaia di pulsanti su una pagina, per identificare un pulsante di accesso, in Excel inseriremo il nome dell'oggetto come loginButton e il tipo di oggetto come nome (vedi evidenziata la riga nell'immagine sopra). Il tipo di oggetto potrebbe essere Xpath, nome CSS o qualsiasi altro valore

Passaggio 3) ReadGuru99ExcelFile.java passerà questi dati allo script del driver Execute.java

Passaggio 4)

  • Per tutti i nostri elementi web dell'interfaccia utente, dobbiamo creare un repository di oggetti in cui posizioneremo il loro localizzatore di elementi (come Xpath, nome, percorso CSS, nome della classe ecc.)
  • Execute.java (il nostro script del driver) leggerà l'intero Object Repository e lo memorizzerà in una variabile
  • Per leggere questo repository di oggetti, abbiamo bisogno di una classe ReadObject che abbia un metodo getObjectRepository per leggerlo.

NOTA: potresti pensare perché abbiamo bisogno di creare un repository di oggetti. La risposta aiuta nella manutenzione del codice. Ad esempio, stiamo utilizzando il pulsante con nome = btnlogin in 10 diversi casi di test. In futuro, lo sviluppatore decide di cambiare il nome da btnlogin a submit. Dovrai apportare una modifica in tutti i 10 casi di test. Nel caso di un repository di oggetti, apporterai la modifica una sola volta nel repository.

Passaggio 5)

  • Il driver passerà i dati da Excel & Object Repository alla classe UIOperation
  • La classe UIOperation ha funzioni per eseguire azioni corrispondenti a parole chiave come CLIC, SETTEXT ecc ... menzionate in Excel
  • La classe UIOperation è una classe Java che ha l'effettiva implementazione del codice per eseguire operazioni sugli elementi web

Il progetto completo sarà simile a:

Diamo un'occhiata a un esempio:

Scenario di prova

  • Stiamo eseguendo 2 casi di test
  • Caso di prova 1:
  • Vai a http://demo.guru99.com/V4/
  • Immettere l'ID utente
  • Inserire la password
  • Fare clic su Reimposta
  • Caso di test 2:
  • Vai a http://demo.guru99.com/V4/
  • Immettere l'ID utente
  • Inserire la password
  • Fare clic su Accedi

object.properties

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

nomeutente = uid

password = password

titolo = barone

loginButton = btnLogin

resetButton = btnReset

ReadGuru99ExcelFile.java

pacchetto 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) genera IOException {// Crea un oggetto della classe File per aprire il file xlsxFile file = nuovo file (filePath + "\\" + fileName);// Crea un oggetto della classe FileInputStream per leggere il file ExcelFileInputStream inputStream = nuovo FileInputStream (file);Cartella di lavoro guru99Workbook = null;// Trova l'estensione del file dividendo il nome del file in substing e ottenendo solo il nome dell'estensioneString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Controlla la condizione se il file è xlsxif (fileExtensionName.equals (". xlsx")) {// Se è un file xlsx, crea l'oggetto della classe XSSFWorkbookguru99Workbook = nuovo XSSFWorkbook (inputStream);}// Controlla la condizione se il file è xlsaltrimenti if (fileExtensionName.equals (". xls")) {// Se è un file xls, crea l'oggetto della classe XSSFWorkbookguru99Workbook = nuovo HSSFWorkbook (inputStream);}// Leggi il foglio all'interno della cartella di lavoro in base al suo nomeFoglio guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}

ReadObject.java

operazione di pacchetto;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ReadObject {Proprietà p = nuove proprietà ();public Properties getObjectRepository () genera IOException {// Legge il file del repository di oggettiInputStream stream = nuovo FileInputStream (nuovo file (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// carica tutti gli oggettip.load (flusso);return p;}}

UIOperation.java

operazione di pacchetto;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class UIOperation {Driver WebDriver;public UIOperation (driver WebDriver) {this.driver = driver;}public void perform (Properties p, String operation, String objectName, String objectType, String value) genera un'eccezione {System.out.println ("");switch (operation.toUpperCase ()) {caso "CLIC":// Esegui clicdriver.findElement (this.getObject (p, objectName, objectType)). click ();rompere;case "SETTEXT":// Imposta il testo sul controllodriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (valore);rompere;caso "GOTOURL":// Ottieni l'URL dell'applicazionedriver.get (p.getProperty (value));rompere;case "GETTEXT":// Ottieni il testo di un elementodriver.findElement (this.getObject (p, objectName, objectType)). getText ();rompere;predefinito:rompere;}}/ *** Trova l'elemento BY utilizzando il tipo e il valore dell'oggetto* @param p* @param objectName* @param objectType* @ritorno* @throws Eccezione* /private By getObject (Properties p, String objectName, String objectType) genera un'eccezione {// Trova per xpathif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}// trova per classealtrimenti if (objectType.equalsIgnoreCase ("CLASSNAME")) {return By.className (p.getProperty (objectName));}// trova per nomealtrimenti if (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}// Trova da cssaltrimenti if (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}// trova tramite collegamentoaltrimenti if (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}// trova per collegamento parzialealtrimenti if (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}altro{lancia una nuova eccezione ("Tipo di oggetto errato");}}}

ExecuteTest.java

pacchetto testCases;import java.util.Properties;operazione di importazione.ReadObject;operazione di importazione.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 () genera un'eccezione {// TODO Stub del metodo generato automaticamenteWebDriver webdriver = nuovo FirefoxDriver ();File ReadGuru99ExcelFile = nuovo ReadGuru99ExcelFile ();Oggetto ReadObject = new ReadObject ();Proprietà allObjects = object.getObjectRepository ();Operazione UIOperation = nuova operazione UIO (webdriver);// Leggi il foglio delle parole chiaveFoglio guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Trova il numero di righe nel file excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Crea un ciclo su tutte le righe del file excel per leggerlofor (int i = 1; i " + row.getCell (0) .toString () + "Avviato");}}}}

Dopo l'esecuzione, l'output sarà simile a -

Scarica i file di progetto Selenium per la demo in questo tutorial

Framework ibrido

Il framework ibrido in Selenium è un concetto in cui stiamo utilizzando il vantaggio sia del framework basato su parole chiave che del framework basato sui dati. È un framework facile da usare che consente ai tester manuali di creare casi di test semplicemente guardando le parole chiave, i dati di test e il repository di oggetti senza codificare nel framework.

Qui per le parole chiave, useremo i file Excel per mantenere i casi di test e per i dati di test, possiamo usare i dati, fornitore del framework Testng.

Qui nel nostro framework ibrido, non abbiamo bisogno di cambiare nulla nel framework basato su parole chiave, qui dobbiamo solo sostituire il file ExecuteTest.java con il file HybridExecuteTest.java.

Questo file HybridExecuteTest contiene tutto il codice per parole chiave guidate con il concetto di provider di dati.

Apparirà la rappresentazione pittorica completa del quadro ibrido

HybridExecuteTest.java

pacchetto testCases;import java.io.IOException;import java.util.Properties;operazione di importazione.ReadObject;operazione di importazione.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) genera un'eccezione {// TODO Stub del metodo generato automaticamenteif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = nuovo FirefoxDriver ();}Oggetto ReadObject = new ReadObject ();Proprietà allObjects = object.getObjectRepository ();Operazione UIOperation = nuova operazione UIO (webdriver);// Richiama la funzione perform per eseguire l'operazione sull'interfaccia utenteoperation.perform (allObjects, keyword, objectName,objectType, value);}@DataProvider (name = "hybridData")public Object [] [] getDataFromDataprovider () genera IOException {Oggetto [] [] oggetto = null;File ReadGuru99ExcelFile = nuovo ReadGuru99ExcelFile ();// Leggi il foglio delle parole chiaveFoglio guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Trova il numero di righe nel file excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();oggetto = nuovo oggetto [rowCount] [5];for (int i = 0; i 

Sommario:

  • Possiamo creare tre tipi di framework di test utilizzando Selenium WebDriver.
  • Si tratta di framework di test basati sui dati, basati su parole chiave e ibridi.
  • Possiamo ottenere un framework basato sui dati utilizzando il provider di dati di TestNG.
  • Nel framework basato su parole chiave, le parole chiave sono scritte in alcuni file esterni come file excel e il codice java chiamerà questo file ed eseguirà casi di test.
  • Il framework ibrido è un mix di framework basato su parole chiave e basato su dati.

Scarica i file di progetto Selenium per la demo in questo tutorial