Creazione di un framework selenio basato sui dati, basato su parole chiave e ibrido



Questo blog spiega cos'è un framework Selenium, i suoi vantaggi e come implementare framework Data Driven, Keyword Driven e Hybrid nel selenio.

Il precedente in questa serie ti hanno dato l'esposizione ai concetti di base nel test del selenio.Tuttavia, in questo blog, ti dirò come utilizzare un framework Selenium per ottimizzare la struttura del tuo codice e questo ti avvicinerà a diventare un .

Cos'è un framework Selenium?

Il framework Selenium è una struttura di codice per semplificare la manutenzione del codice e migliorare la leggibilità del codice. Un framework comporta la suddivisione dell'intero codice in parti di codice più piccole, che testano una particolare funzionalità.





Il codice è strutturato in modo tale che il 'set di dati' sia separato dall'effettivo 'caso di test' che testerà la funzionalità dell'applicazione web. Può anche essere strutturato in modo tale che i casi di test che devono essere eseguiti siano chiamati (invocati) da un'applicazione esterna (come un .csv).

Ci sono un certo numero di framework là fuori, ma 3 framework Selenium comunemente usati sono:



Questi framework saranno discussi con una demo in questo blog. Ma prima di andare oltre, lascia che ti dica perché deve essere installato un framework Selenium e quali vantaggi otterrai dal loro utilizzo.

Perché abbiamo bisogno di un framework Selenium?

Senza un framework, ci sarà un test case che comprenderà l'intera funzionalità di test. La parte spaventosa è che questo singolo test case ha la capacità di salire fino a un milione di righe di codice. Quindi è abbastanza ovvio che un test case così enorme sarà difficile da leggere. Anche se desideri modificare qualsiasi funzionalità in un secondo momento, avrai difficoltà a modificare il codice.

cos'è un thread daemon

Poiché l'implementazione di un framework si tradurrà in parti di codice più piccole ma multiple, ci sono vari vantaggi.



Vantaggi del quadro Selenium

  • Riutilizzo del codice aumentato
  • Leggibilità del codice migliorata
  • Maggiore portabilità
  • Script ridottoManutenzione

Ora che conosci le basi dei framework, lascia che ti spieghi ciascuno di essi in dettaglio.

Framework basato sui dati

Un framework Data Driven in Selenium è la tecnica per separare il 'set di dati' dal 'test case' (codice) effettivo. Questo framework dipende completamente dai dati di test di input. I dati del test vengono forniti da fonti esterne come un file Excel, un file .CSV o qualsiasi database.

framework data driven - framework selenio - edureka

Poiché il test case è separato dal set di dati, possiamo facilmente modificare il test case di una particolare funzionalità senza apportare modifiche all'ingrosso al tuo codice. Ad esempio, se si desidera modificare il codice per la funzionalità di accesso, è possibile modificare solo quello invece di dover modificare anche qualsiasi altra parte dipendente nello stesso codice.

Oltre a questo, puoi anche controllare facilmente quanti dati devono essere testati. È possibile aumentare facilmente il numero di parametri di test aggiungendo più campi nome utente e password al file excel (o altre fonti).

Ad esempio, se devo controllare l'accesso a una pagina web, posso mantenere il set di credenziali di nome utente e password in un file excel e passare le credenziali al codice per eseguire l'automazione sul browser in un file di classe Java separato.

Utilizzo di Apache POI con Selenium WebDriver

WebDriver non supporta direttamente la lettura di file Excel. Quindi usiamo Apache POI per leggere / scrivere su qualsiasi documento Microsoft Office. Puoi scaricare Apache POI (set di file JAR) da Qui . Scarica il file zip o il file tar secondo le tue esigenze e inseriscili insieme al set di JAR Selenium.

Sarà cura del coordinamento tra il codice principale e il set di dati Provider di dati TestNG, che è una libreria che fa parte dei file JAR POI di Apache. A scopo dimostrativo, ho creato un file excel chiamato 'LoginCredentials' in cui i nomi utente e le password sono stati memorizzati in colonne diverse.

astrazione dei dati in c ++

Dai un'occhiata al codice seguente per comprendere il caso di test. È un semplice codice per testare la funzionalità di accesso di un'applicazione di prenotazione voli.

pacchetto 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) throws InterructedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (nome utente) driver.findElement (By.name ('password' )). sendKeys (password) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Find a Flight: Mercury Tours: '),' Credenziali non valide ') System.out.println (' Accesso riuscito ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int righe = config.getRowCount (0) Object [] [] credentials = new Object [righe] [2] per (int i = 0i

Se hai notato dall'alto, abbiamo un metodo chiamato 'TestDataFeed ()'. In questo metodo, ho creato un'istanza di oggetto di un'altra classe denominata 'ReadExcelFile'. Durante la creazione di un'istanza di questo oggetto, ho inserito il percorso del mio file excel contenente i dati. Ho ulteriormente definito un ciclo for per recuperare il testo dalla cartella di lavoro di Excel.

Tuttavia, per leggere i dati da un dato numero di foglio, numero di colonna e numero di riga, le chiamate vengono effettuate alla classe 'ReadExcelFile'. Il codice del mio 'ReadExcelFile' è di seguito.

pacchetto 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 XSSFSheet sheet public (String ReadExcel sheet 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 riga = wb.getSheetAt (sheetIndex) .getLastRowNum () riga = riga + 1 riga di ritorno}}

Per prima cosa nota le librerie che ho importato. Ho importato Apache POI XSSF librerie che vengono utilizzate per leggere / scrivere dati su file Excel. Qui, ho creato un costruttore (oggetto dello stesso metodo) per passare i valori: numero di foglio, numero di riga e numero di colonna. Per comprendere meglio questo framework, ti ​​chiedo di guardare il video sottostante, dove l'ho spiegato in modo strutturato.

Framework basato sui dati in Selenium WebDriver | Tutorial sul selenio

Ora passiamo al framework, ovvero il framework basato sulle parole chiave.

Framework basato su parole chiave

Il framework Keyword Driven è una tecnica in cui tutte le operazioni e le istruzioni da eseguire sono scritte separatamente dal test case effettivo. La somiglianza che ha con il framework Data Driven è che le operazioni da eseguire vengono nuovamente memorizzate in un file esterno come il foglio Excel.

Le operazioni di cui sto parlando non sono altro che i metodi che devono essere eseguiti come parte di un caso di prova. Il vantaggio del framework Keyword Driven è che puoi facilmente controllare le funzionalità che desideri testare. È possibile specificare i metodi che testano la funzionalità dell'applicazione nel file excel. Pertanto, verranno testati solo i nomi dei metodi specificati in Excel.

Ad esempio, per accedere all'applicazione web, possiamo scrivere più metodi nel test case principale, in cui ogni test case testerà determinate funzionalità. Per istanziare il driver del browser potrebbe esserci un metodo, per trovare i campi nome utente e password, potrebbero esserci metodi, per navigare in una pagina web potrebbe esserci un altro metodo, ecc.

Dai un'occhiata al codice seguente per capire come appare il framework. Le righe commentate nel codice seguente servono come spiegazione se non si capisce.

pacchetto 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 Azioni {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .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 ()}}

Come puoi vedere, le diverse funzionalità che devono essere testate sono presenti in metodi separati in attesa di essere richiamati. Ora, questi metodi verranno chiamati da un'altra classe, in base alla presenza del nome del metodo nel file excel. Allo stesso modo, per leggere il file excel e restituire i risultati, ho scritto un'altra classe. Entrambi sono visualizzati di seguito.

Il file di classe che invoca i metodi è questo.

interfaccia marker nell'esempio java
pacchetto KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Dichiarare il percorso del file Excel con il nome del file Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Qui stiamo passando il percorso Excel e SheetName come argomenti per connettersi con il file Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Per ora vengono utilizzati valori hard coded per riga e colonne Excel // Per ora vengono utilizzati valori hard coded per riga Excel & colonne per ora // Nei capitoli successivi sostituiremo questi valori hardcoded con varibales // Questoèil ciclo per leggere i valori della colonna 3 (Action Keyword) riga per riga per (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() } } } } 

E il file di classe che legge i valori di Excel è questo.

pacchetto 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 public class ReadExcelData {private static XSSFSheet ExcelWSheet privato statico XSSFWorkbook ExcelWBook privato statico XSSFCell Cell // Questo metodo serve per impostare il percorso del file e per aprire il file Excel // Passa Excel Path e SheetName come argomenti a questo metodo public static void setExcelFile (String Path, String SheetName) genera Eccezione {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Questo metodo serve per leggere i dati del test dalla cella Excel // In questo stiamo passando parametri / argomenti come Row Num e Col Num public static String getCellData (int RowNum, int ColNum) genera un'eccezione {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Ora, passiamo alla parte finale di questo blog sul framework Selenium, dove ti mostrerò come costruire un framework ibrido.

Framework ibrido

Il framework ibrido è una tecnica in cui possiamo fare il miglior uso di entrambi i framework Data Driven e Keyword Driven Selenium. Utilizzando gli esempi mostrati sopra in questo blog, possiamo creare un framework ibrido memorizzando i metodi da eseguire in un file excel (approccio basato su parole chiave) e passando questi nomi di metodo al Java Reflection Class (approccio basato sui dati) invece di creare un file Se altro loop nella classe 'DriverScript'.

Dai un'occhiata alla classe 'DriverScript' modificata nello snippet di codice sottostante.Qui, invece di utilizzare più cicli If / Else, viene utilizzato l'approccio basato sui dati per leggere i nomi dei metodi dal file Excel.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Questo è un oggetto di classe, dichiarato 'public static' // In modo che possa essere utilizzato al di fuori dell'ambito del metodo main [] public static Actions actionKeywords public static String sActions // Questo è un oggetto della classe di riflessione, dichiarato come 'public static' // In modo che possa essere utilizzato al di fuori dell'ambito del metodo main [] public static Method method [] public static void main (String [] args) genera Eccezione {// Dichiarazione del percorso del file Excel con il nome del file Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Qui stiamo passando il percorso Excel e SheetName per connettersi con il file Excel // Questo metodo è stato creato in precedenza ReadExcelData.setExcelFile (sPath, 'Sheet1') // Per ora vengono utilizzati valori hard coded per righe e colonne di Excel // In seguito, utilizzeremo questi valori hard coded in modo molto più efficiente // Questo è il ciclo di lettura i valori della riga della colonna (Action Keyword) per riga // Significa che questo ciclo eseguirà tutti i passaggi menzionati per il test case nel foglio Passaggi del test per (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

Per comprendere meglio questo concetto di framework Data Driven, Keyword Driven e Hybrid Driven, ti chiedo di guardare il video sottostante.

Selenium Framework utilizzando Java | Tutorial sul selenio | Selenio Formazione in linea

Spero che questo blog ti sia stato utile e ti abbia dato una chiara comprensione di cosa sia un framework Selenium, come sia vantaggioso e come costruire la tua struttura di codice usando questi 3 framework Selenium. Resta sintonizzato su altri blog di questa serie.

Se desideri imparare il selenio e costruire una carriera nel dominio dei test, dai un'occhiata al nostro interattivo, live-online qui, viene fornito con supporto 24 * 7 per guidarti durante il tuo periodo di apprendimento. I concetti relativi a 'Selenium Framework' hanno una copertura approfondita nel corso di Edureka.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.