El proyecto consiste en un framework de automatización de pruebas basado en Selenium WebDriver que sirve como punto de partida en cualquier proyecto de automatización de pruebas web UI.
Este framework provee todas las funcionalidades necesarias para abordar la automatización de pruebas web con Selenium de una forma estándar, reduciendo tiempos de configuración y construcción, minimizando la curva de aprendizaje y el nivel técnico requerido para su uso.
A su vez, encapsula lógica en común y brinda un marco de trabajo fácilmente configurable y extendible según la necesidad de cada proyecto.
Estas instrucciones te permitirán obtener una copia local del proyecto en funcionamiento para propósitos de desarrollo y pruebas.
Requisitos necesarios para el correcto funcionamiento del template y cómo instalarlos.
- Java
- IDE de preferencia como por ejemplo, Eclipse IDE
- TestNG, disponible también desde el Marketplace de Eclipse.
A continuación se describen los pasos para descargar e instalar el template en tu IDE de preferencia.
- Descargar una copia o clonar el código del repositorio desde GitHub.
- Importar el proyecto en el IDE, recordar hacerlo como proyecto de tipo “Maven project”.
- Al finalizar la importación, el proyecta está listo para usarse.
A continuación de presenta información y ejemplos que detallan cómo comenzar a crear las pruebas automatizadas usando las clases del template.
Si ya estás familiarizad@ con los conceptos de Java, Selenium y POO, te invitamos a analizar y comprender la estructura de clases y packetes del template.
Comenzamos creando nuestra primer clase de pruebas utilizando la opción File > New > Class . Esta clase de pruebas contendrá los distintos métodos de prueba que se vayan generando en el proyecto.
Recomendamos que las clases de prueba extiendan de la clase _ TestBase _ donde se resuelve la creación del driver y el manejador de propiedades de forma totalmente automática.
public class MyFirstTestClass extends TestBase {
}
Para crear nuestra primer prueba automatizada, basta con crear un método público dentro de la clase de prueba con la anotación @Test .
public class MyFirstTestClass extends TestBase {
@Test
public void sampleTestCase {
//Acá ocurrirá la magia
}
}
Utilizando el objeto WebAutomator heredado de la clase TestBase podremos acceder a las principales funcionalidades de navegación del template. En el siguiente ejemplo se muestra el código para acceder a una determinada dirección URL, navegar hacia atrás y adelante, refrescar la página y cerrar el navegador.
package test;
import org.testng.annotations.Test;
public class MyFirstTestClass extends TestBase {
@Test
public void sampleTestCase() {
String testUrl = "https://qalified.com/";
automator.goTo(testUrl); // Permite navegar a una URL
automator.back(); // Permite navegar hacia atras
automator.forward(); // Permite navegar hacia adelante
automator.refresh(); // Permite recargar la página
automator.closeBrowser(); // Permite cerrar el navegador
}
}
Utilizando la clase WebAutomator y UIElement es posible simular interacciones con los distintos elementos de la interfaz gráfica Web. Para ello, primero se debe crear el objeto UIElement utilizando el método find de WebAutomator .
@Test
public void loginTestCase() {
String testUrl = "https://qalified.com/";
automator.goTo(testUrl);
automator.maximizeWindows();
UIElement link_contacto = automator.find(By.linkText("CONTACTO"));
link_contacto.click();
UIElement input_nombre = automator.find(By.name("txtName"));
input_nombre.setText("James Bond");
}
Para conocer más en detalle sobre las clases WebAutomator y UIElement y sus métodos, visitar el apartado Especificación
Para incorporar las verificaciones, es necesario utilizar los metodos provistos por TestNG , importando el package org.testng.Assert.* a la clase de pruebas y utilizando los distintos metodos assert... que provee.
En el siguiente ejemplo se utiliza el método assertEquals() para verificar el texto ingresado en el campo de nombre
@Test
public void loginTestCase() {
String testUrl = "https://qalified.com/";
automator.goTo(testUrl);
automator.maximizeWindows();
UIElement link_contacto = automator.find(By.linkText("CONTACTO"));
link_contacto.click();
UIElement input_nombre = automator.find(By.name("txtName"));
input_nombre.setText("James Bond");
assertEquals(input_nombre.getValue(), "James Bond", "El texto ingresado no coincide!");
}
Agregar la clase recién creada al archivo testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite_Demo">
<parameter name="browser" value="CHROME" />
<parameter name="max_wait" value="30" />
<parameter name="close_browser_after_execution" value="false" />
<test thread-count="5" name="testSuite-sample">
<classes>
<class name="test.MyFirstTestClass" />
</classes>
</test>
</suite> <!-- Suite -->
Los parámetros browser y max_wait se_ utilizan para establecer el navegador y tiempos de espera durante las pruebas. El parámetro close_browser_after_execution permite indicar si se debe cerrar el navegador tras la ejecución de la prueba.
WebAutomator La clase WebAutomator encapsula y extiende toda la funcionalidad de la clase WebDriver de Selenium y brinda mecanismos más eficientes para la interacción con el navegador y la web. A su vez, resuelve automaticamente los tiempos de espera aplicando ExplicitWaits al momento de interactuar con los elementos HTML.
Método | Descripción |
---|---|
public WebDriver getDriver() |
Retorna el objeto WebDriver de Selenium |
public void maximizeWindows() |
Maximiza la ventana del navegador |
public void back() |
Navega hacia atras en el navegador |
public void forward() |
Navega hacia adeante en el navegador |
public void refresh() |
Refresca la página del navegador |
public void goTo(String url) |
Navega hacia la url determinada |
public void closeBrowser() |
Cerrar el navegador |
public void closeCurrentTab() |
Cerrar la pestaña de navegación |
public String getCurrentUrl() |
Retorna la URL actual de la pestaña activa |
public UIElement find(By by) |
Retorna el objeto UIElement que coincide con el selector By recibido por parámetro |
public UIElement findChild(By parent, By child) |
Analiza el objeto UIElement (parent) y retorna el primer objeto UIElement hijo que coincide con el selector By (child) |
public UIElement waitUntilVisible(By by) |
Retorna el objeto UIElement cuando el mismo sea visible en pantalla |
public UIElement waitUntilClickable(By by) |
Retorna el objeto UIElement cuando el mismo sea cliqueable en pantalla |
public void deleteAllCookies() |
Elimina todas las cookies en la sesión del navegador |
public Set getAllCookies() |
Retorna todas las cookies del navegador |
public Cookie getCookie(String cookie) |
Retorna la cookie cuyo nombre coincida con el recibido por parámetro |
public void addCookie(Cookie cookie) |
Agrega una nueva cookie en el navegador |
public void takeScreenshot() |
Realiza una captura de pantalla y la almacena en formato .png |
UIElement La clase UIElement sustituye a la clase WebElement de Selenium encapsula toda la funcionalidad sobre la interacción de los elementos de la UI web.
Método | Descripción |
---|---|
public WebElement getWebElement() |
Retorna el objeto WebElement de Selenium |
public void setText(String text) |
Ingresa el texto recibido por parámetros en el elemento |
public void clear() |
Limpia el contenido del elemento |
public void clearAndSetText(String text) |
Limpia el contenido del elemento e ingresa el texto recibido por parámetro |
public String getLink() |
Retorna el valor del atributo "href" del elemento web |
public void submit() |
Confirma el envio de información |
public void click() |
Simula la acción de clic en el elemento |
public boolean isSelected() |
Retorna verdadero si el elemento web está seleccionado |
public boolean isDisplayed() |
Retorna verdadero si el elemento web es visible en pantalla |
public boolean isEnabled() |
Retorna verdadero si el elemento web está habilitado |
public String getText() |
Retorna el texto visible de un elemento web |
public String getValue() |
Retorna el valor de un elemento |
public UIElement findElementBy(By by) |
Retorna un nuevo UIElement interno al elemento web y que coincida con el selector By recibido por parámetros |
public List findElementsBy(By by) |
Retorna una lista de UIElement internos al elemento web y que coincidan con el selector By recibido por parámetros |
public void setTextWithActions(String text) |
Ingresa el texto recibido por parámetros en el elemento utilizando la clase Actions de Selenium |
public void selectByValue(String value) |
Selecciona una opcion de la lista basado en el atributo value de la misma |
public void selectByIndex(Integer index) |
Selecciona una opcion de la lista basado en el indice numerico de la misma |
public void selectByVisibleText(String text) |
Selecciona una opcion de la lista basado en el texto visible de la misma |
public void moveToElement() |
Mueve la UI web hasta hacer visible el elemento en pantalla |
Otras funcionalidades
- CSVHandler : Manejo de Archivos .CSV y Excel.
- PropertiesHandler : Manejo de Properties Java. Por ejemplo, para el manejo de datos y parametrización de pruebas.
- CiGenerator : Generador de cédulas con números random.
- DBConnector : Conexión de base de datos.
- PostgresConnector : Conexión de base de datos Postgres.
- DataBaseHandler : Manejo de base de datos.
- MailConnector : Conexión de email con distintos protocolos.
- MailHandler : Manejo de Email, ejemplo para leer y analizar email.
- Selenium WebDriver - El framework de automatización.
- TestNG - Framework de pruebas.
- Maven - Herramienta de construcción de proyecto y gestión de dependencias.
⌨️ con ❤️ por QAlified