Creación de un marco de selenio híbrido, basado en datos y basado en palabras clave



Este blog explica qué es un marco de Selenium, sus beneficios y cómo implementar marcos basados ​​en datos, basados ​​en palabras clave e híbridos en selenium.

El anterior en esta serie le han dado a conocer los conceptos básicos de las pruebas de selenio.Sin embargo, en este blog, te diré cómo usar un marco de Selenium para optimizar la estructura de tu código y esto te acercará a convertirte en un .

¿Qué es un marco de selenio?

El marco de Selenium es una estructura de código para simplificar el mantenimiento del código y mejorar la legibilidad del código. Un marco implica dividir todo el código en fragmentos de código más pequeños, que prueban una funcionalidad particular.





El código está estructurado de tal manera que el 'conjunto de datos' se separa del 'caso de prueba' real que probará la funcionalidad de la aplicación web. También se puede estructurar de una manera en la que los casos de prueba que deben ejecutarse se llaman (invocan) desde una aplicación externa (como un .csv).

¿Puedes hacer una matriz de objetos en java?

Hay una serie de marcos, pero 3 marcos de Selenium de uso común son:



Estos marcos se discutirán con una demostración en este blog. Pero antes de continuar, permítame decirle por qué se debe implementar un marco de Selenium y qué beneficios obtendrá al usarlo.

¿Por qué necesitamos un marco de Selenium?

Sin un marco establecido, habrá un caso de prueba que comprenderá toda la funcionalidad de prueba. La parte aterradora es que este único caso de prueba tiene la capacidad de aumentar hasta un millón de líneas de código. Así que es bastante obvio que un caso de prueba tan grande será difícil de leer. Incluso si desea modificar alguna funcionalidad más adelante, tendrá dificultades para modificar el código.

Dado que la implementación de un marco dará como resultado piezas de código más pequeñas pero múltiples, existen varios beneficios.



Beneficios del marco de selenio

  • Mayor reutilización de código
  • Legibilidad de código mejorada
  • Mayor portabilidad
  • Guión reducidomantenimiento

Ahora que conoce los conceptos básicos de los marcos, permítame explicar cada uno de ellos en detalle.

Marco basado en datos

Un marco basado en datos en Selenium es la técnica de separar el 'conjunto de datos' del 'caso de prueba' (código) real. Este marco depende completamente de los datos de prueba de entrada. Los datos de prueba se obtienen de fuentes externas como un archivo de Excel, un archivo .CSV o cualquier base de datos.

marco basado en datos - marco de selenio - edureka

Dado que el caso de prueba está separado del conjunto de datos, podemos modificar fácilmente el caso de prueba de una funcionalidad en particular sin realizar cambios al por mayor en su código. Por ejemplo, si desea modificar el código para la funcionalidad de inicio de sesión, puede modificar solo eso en lugar de tener que modificar también cualquier otra parte dependiente en el mismo código.

Además de esto, también puede controlar fácilmente la cantidad de datos que se deben probar. Puede aumentar fácilmente el número de parámetros de prueba agregando más campos de nombre de usuario y contraseña al archivo de Excel (u otras fuentes).

Por ejemplo, si tengo que verificar el inicio de sesión en una página web, entonces puedo mantener el conjunto de credenciales de nombre de usuario y contraseña en un archivo de Excel y pasar las credenciales al código para realizar la automatización en el navegador en un archivo de clase Java separado.

Uso de Apache POI con Selenium WebDriver

WebDriver no admite directamente la lectura de archivos de Excel. Por lo tanto usamos PDI de Apache para leer / escribir en cualquier documento de Microsoft Office. Puede descargar Apache POI (conjunto de archivos JAR) desde Aquí . Descargue el archivo zip o el archivo tar según sus necesidades y colóquelos junto con el conjunto de Selenium JAR.

pruebas de navegador cruzado en selenium

La coordinación entre el código principal y el conjunto de datos estará a cargo de Proveedores de datos de TestNG, que es una biblioteca que viene como parte de los archivos JAR de Apache POI. Para fines de demostración, he creado un archivo de Excel llamado 'LoginCredentials' en el que los nombres de usuario y las contraseñas se han almacenado en diferentes columnas.

Eche un vistazo al siguiente código para comprender el caso de prueba. Es un código simple para probar la funcionalidad de inicio de sesión de una aplicación de reserva de vuelos.

paquete 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 contraseña) lanza InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = nuevo ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('contraseña' )). sendKeys (contraseña) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). matches ('Find a Flight: Mercury Tours: '),' Credenciales no válidas ') System.out.println (' Inicio de sesión exitoso ')} @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 lo notó desde arriba, tenemos un método llamado 'TestDataFeed ()'. En este método, he creado una instancia de objeto de otra clase llamada 'ReadExcelFile'. Al crear una instancia de este objeto, he introducido la ruta de mi archivo de Excel que contiene los datos. Además, he definido un bucle for para recuperar el texto del libro de Excel.

Pero, para leer los datos de un número de hoja dado, número de columna y número de fila, las llamadas se realizan a la clase 'ReadExcelFile'. El código de mi 'ReadExcelFile' está a continuación.

paquete 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 String XSSFSFile sheet public 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 número de hoja, int fila, int columna) {hoja = wb.getSheetAt (número de hoja) String data = sheet.getRow (fila) .getCell (columna) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int fila = wb.getSheetAt (sheetIndex) .getLastRowNum () fila = fila + 1 fila de retorno}}

Primero observe las bibliotecas que he importado. Yo he importado Apache POI XSSF bibliotecas que se utilizan para leer / escribir datos en archivos de Excel. Aquí, he creado un constructor (objeto del mismo método) para pasar los valores: número de hoja, número de fila y número de columna. Para comprender mejor este marco, le solicito que lea el video a continuación, donde lo he explicado de manera estructurada.

Marco basado en datos en Selenium WebDriver | Tutorial de selenio

Ahora pasemos al marco, es decir, marco basado en palabras clave.

Marco basado en palabras clave

El marco basado en palabras clave es una técnica en la que todas las operaciones e instrucciones que se deben realizar se escriben por separado del caso de prueba real. La similitud que tiene con el framework Data Driven es que, las operaciones a realizar se almacenan nuevamente en un archivo externo como una hoja de Excel.

Las operaciones de las que estoy hablando no son más que los métodos que deben ejecutarse como parte de un caso de prueba. La ventaja del marco basado en palabras clave es que puede controlar fácilmente las funcionalidades que desea probar. Puede especificar los métodos que prueban la funcionalidad de la aplicación en el archivo de Excel. Por lo tanto, solo se probarán los nombres de métodos que se especifican en Excel.

Por ejemplo, para iniciar sesión en la aplicación web, podemos escribir varios métodos en el caso de prueba principal, en el que cada caso de prueba probará cierta funcionalidad. Para crear una instancia del controlador del navegador, podría haber un método, para encontrar los campos de nombre de usuario y contraseña, podría haber métodos, para navegar a una página web podría haber otro método, etc.

Eche un vistazo al siguiente código para comprender cómo se ve el marco. Las líneas comentadas en el siguiente código sirven como explicación si no las comprende.

paquete 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 Acciones de clase pública {controlador de WebDriver estático público public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {controlador .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 (' contraseña ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (Por.nombre ('inicio de sesión')). ​​Haga clic en ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Como puede ver, las diferentes funcionalidades que deben probarse están presentes en métodos separados a la espera de ser llamados. Ahora, estos métodos se llamarán desde otra clase, según la presencia del nombre del método en el archivo de Excel. Y de manera similar, para leer el archivo de Excel y enviar los resultados, escribí otra Clase. Ambos se muestran a continuación.

El archivo de clase que invoca los métodos es este.

que es una interfaz de marcador en java
paquete KeywordDriven public class DriverScript {public static void main (String [] args) throws Exception {// Declarando la ruta del archivo de Excel con el nombre del archivo de Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Aquí estamos pasando la ruta de Excel y SheetName como argumentos para conectar con el archivo de Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Los valores codificados se utilizan para filas y columnas de Excel por ahora // Los valores codificados se utilizan para filas y columnas de Excel columnas por ahora // En capítulos posteriores reemplazaremos estos valores codificados por varibales // Este es el ciclo para leer los valores de la columna 3 (Palabra clave de acción) fila por fila para (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() } } } } 

Y el archivo de clase que lee los valores de Excel es este.

paquete 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 clase pública ReadExcelData {estática XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // Este método es para establecer la ruta del archivo y abrir el archivo de Excel // Pasar la ruta de Excel y el nombre de la hoja como argumentos a este método public static void setExcelFile (ruta de la cadena, cadena SheetName) arroja Exception {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Este método es para leer los datos de prueba de la celda de Excel // En esto estamos pasando parámetros / argumentos como Row Num y Col Num public static String getCellData (int RowNum, int ColNum) arroja Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Ahora, pasemos a la parte final de este blog sobre el marco de Selenium, donde le mostraré cómo crear un marco híbrido.

Marco híbrido

El marco híbrido es una técnica en la que podemos hacer el mejor uso de los marcos de Selenium basados ​​en datos y basados ​​en palabras clave. Usando los ejemplos que se muestran arriba en este blog, podemos construir un marco híbrido almacenando los métodos para ejecutar en un archivo de Excel (enfoque basado en palabras clave) y pasando estos nombres de métodos a la Clase de reflexión de Java (enfoque basado en datos) en lugar de crear un Si / Else bucle en la clase 'DriverScript'.

Eche un vistazo a la clase 'DriverScript' modificada en el siguiente fragmento de código.Aquí, en lugar de usar múltiples bucles If / Else, se usa el enfoque basado en datos para leer los nombres de los métodos del archivo de Excel.

package HybridFramework import java.lang.reflect.Method public class DriverScriptJava {// Este es un objeto de clase, declarado como 'public static' // Para que pueda ser usado fuera del alcance del método main [] public static Actions actionKeywords public static String sActions // Este es un objeto de clase de reflexión, declarado como 'public static' // Para que pueda usarse fuera del alcance del método main [] método public static Método método [] public static void main (String [] args) arroja una excepción {// Declarando la ruta del archivo de Excel con el nombre del archivo de Excel String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Aquí estamos pasando la ruta de Excel y SheetName para conectar con el archivo de Excel // Este método fue creado previamente ReadExcelData.setExcelFile (sPath, 'Sheet1') // Los valores codificados se utilizan para las filas y columnas de Excel por ahora // Más adelante, usaremos estos valores codificados de forma mucho más eficiente // Este es el ciclo de lectura los valores de la fila de la columna (palabra clave de acción) por fila // Significa que este ciclo ejecutará todos los pasos mencionados para el caso de prueba en la hoja Pasos de prueba para (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

Para comprender mejor este concepto de marcos basados ​​en datos, basados ​​en palabras clave e híbridos, le solicito que vea el siguiente video.

Selenium Framework usando Java | Tutorial de selenio | Entrenamiento de selenio en línea

Espero que este blog le haya sido útil y le haya dado una comprensión clara de qué es un marco de Selenium, cómo es beneficioso y cómo construir su estructura de código utilizando estos 3 marcos de Selenium. Estén atentos a más blogs de esta serie.

Si desea aprender Selenium y desarrollar una carrera en el dominio de las pruebas, consulte nuestro programa interactivo en línea aquí, que viene con soporte 24 * 7 para guiarlo durante su período de aprendizaje. Los conceptos relacionados con 'Selenium Framework' tienen una cobertura en profundidad en el curso de Edureka.

Tienes una pregunta para nosotros? Menciónalo en la sección de comentarios y nos comunicaremos contigo.