En multitud de páginas sobre las que hagamos automation testing, tendrán el famoso y 'amigable' popup de aceptar cookies.
Aplicando POM a nuestro código, no nos será difícil localizar el botón de 'Aceptar cookies' y seguir con los test automatizados que teníamos previstos... Pero, muchas veces tendremos el siguiente error al correr nuestros tests:
Esto es debido a que gracias a nuestro 'querido' popup, la página pierde el contexto actual y se interpreta como que se ha cerrado, y por lo tanto, no se puede continuar con la ejecución de los tests.
Esto lo solucionamos en dos pasos:
1.- En el POM que tengamos creado. Ponemos el atributo 'page' como PUBLICO:
2.- En la página donde tengamos los tests, pasar SIEMPRE el parámetro '{page}'
El código de la función de aceptar cookies en el POM sería por ejemplo el siguiente:
async accepXCookies(){
await expect(this.XCookiesButton).toBeVisible();
return this.XCookiesButton.click();
}
Por último, recordad que según la calidad de la conexión que tengamos...el 'bendito' popup tardará más o menos tiempo en aparecer... Podemos jugar con {timeout: x} pero en mi opinión, no es lo mas recomendable.
Espero que os haya servido de ayuda amigos!!
Saludos!!!!
Muy buenos días!!
Siguiendo con las pruebas en Robot Framework, os dejo este ejemplo de API testing:
*** Settings ***
Library REST https://mystoreapi.com
*** Variables ***
${ep_catalog} /catalog
${ep_product} /product
${ep_order} /order
${order} {"customer": "Pablo García", "address": "123 Main St"}
${product} {"name": "Banana","price": 0.99,"manufacturer": "General Fruit CO", "category": "fruits","description": "Super Banana","tags":"La noble fruta" }
${product_order} {"productId":"882580", "amount": 2}
${product_id} 882580
${category} fruits
*** Test Cases ***
EP_CATALOG. Listamos todas las categorias
REST.GET ${ep_catalog}/categories
Integer response status 200
[Teardown] Output response body
EP_CATALOG. Listamos todos los primeros 100 productos
REST.GET ${ep_catalog}/products?limit=100&skip=0
Integer response status 200
[Teardown] Output response body
EP_CATALOG. Listamos los 100 primeros productos de una categoria
REST.GET ${ep_catalog}/category/${category}/products?limit=100&skip=0
Integer response status 200
[Teardown] Output response body
EP_CATALOG. Listamos un producto por su ID
REST.GET ${ep_catalog}/product/${product_id}
Integer response status 200
[Teardown] Output response body
EP_CATALOG. Creamos, leemos y borramos un nuevo producto en la tienda
REST.POST ${ep_catalog}/product ${product}
Integer response status 201
${nuevo_prod_id} Integer response body id
Log To Console ${nuevo_prod_id}[0]
REST.GET ${ep_catalog}/product/${nuevo_prod_id}[0]
Integer response status 200
Log To Console response body
REST.DELETE ${ep_catalog}/product/${nuevo_prod_id}[0]
Integer response status 200
Set Suite Variable ${nuevo_prod_id}
[Teardown] Output response body
EP_ORDER. Creamos un nuevo pedido, añadimos un producto, listamos de nuevo el pedido, borramos el producto,listamos y borramos el pedido
REST.POST ${ep_order}/new ${order}
Integer response status 201
${order_id} Integer response body id
Log To Console response body
REST.POST ${ep_order}/${order_id}[0]/product ${product_order}
Integer response status 201
Log To Console response body
REST.GET ${ep_order}/${order_id}[0]
Integer response status 200
Log To Console response body
REST.DELETE ${ep_order}/${order_id}[0]/product/${product_id}
Integer response status 200
Log To Console response body
REST.GET ${ep_order}/${order_id}[0]
Integer response status 200
Log To Console response body
REST.DELETE ${ep_order}/${order_id}[0]
Integer response status 200
[Teardown] Output response body
Tips
Usamos la libreria REST
Ojo con las variables que recogemos del 'response body'
${nuevo_prod_id} Integer response body id
Son objetos tipo array por defecto.
Si queremos usar su valor, tenemos que pasar obligatoriamente el índice
REST.GET ${ep_catalog}/product/${nuevo_prod_id}[0]
En nuestro caso siempre será 0 ya que tenemos una colección con un único elemento.
Todos los resultados se muestran en el reporte integrado HTML dentro de la carpeta /results de nuestro proyecto
Espero que les sirva de ayuda.
Saludos!!
Muy buenos días!!
En este post les dejo una primera aproximación a RobotFramework.
Siguiendo la estela de Cypress y Playwright, este framework nos ayuda a realizar automation testing. Es open source y su instalación es muy sencilla.
FUNDAMENTAL !! Tener instalado Python
Desde CLI:
pip (o pip3) install robotframework (Se puede instalar también mediante brew)
Instalamos las librerías:
pip install robotframework-seleniumlibrary
pip install robotframework-browser
rfbrowser init (--skip-browsers EN CASO DE TENER YA INSTALADOS LOS BINARIOS DE LOS BROWSERS)
Nos creamos una carpeta....
Abrimos nuestro IDE y creamos un archivo con extension .robot
Copiamos el siguiente código de prueba
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
Abrir y verificar Título en FRT
Open Browser
... https://www.freerangetesters.com
... chrome
Maximize Browser Window
Title Should Be Free Range Testers
Close Browser
Le damos al 'PLAY' y comprobamos 'la magia' 🤣
Y tenemos generados unos reportes muy apañados.....
Ahora toca seguir profundizando en este interesante framework.
Os paso links de interés
SALUDOS!!!
Buenos días!!
Este post contiene dos maneras de automatizar pruebas en API desde Jenkins. El primer caso es un POST y GET de un nuevo usuario en la API https://petstore.swagger.io/ . El segundo, es una ejecución automatizada de una colección creada previamente en Postman y cómo a través de Newman, nos genera un reporte HTML que será accesible desde nuestra máquina local.
1.- POST y GET en https://petstore.swagger.io/ por medio de cURL
Pipeline script de Jenkins:
pipeline{
agent any
stages{
stage('Creacion usuarios'){
steps{
script{
sh(script:"curl -d 'name=Pepito&status=Aperrado' -X POST https://petstore.swagger.io/v2/pet/2")
sh(script:"curl -X GET https://petstore.swagger.io/v2/pet/2")
}
}
}
}
}
2.- Ejecución de una colección de Postman y generación de reporte con newman
API de pruebas : https://rickandmortyapi.com
Previamente tenemos nuestra colección de Postman guardada.
Importante marcar la opción en Jenkins Provide Node & npm bin/ folder to PATH Se adjunta en screenshot.
En 'Build Steps' :
cd /Users/usuario/Carpeta_Coleccion_Postman
newman run Rick\&Morty_API.postman_collection.json -r htmlextra
Espero que les sirva de ayuda.
Saludos!!
En Free Range Testers siempre estamos buscando formas innovadoras de compartir conocimientos y experiencias que enriquezcan a nuestros miembros. Es por eso que estamos contentos de presentarte El Dojo, un espacio diseñado para fomentar el aprendizaje colaborativo y la exposición de soluciones creativas en el mundo del testing y la calidad de software.
¿Qué es El Dojo?
Inspirado en los tradicionales dojos de artes marciales, donde el aprendizaje y la práctica van de la mano, El Dojo de Free Range Testers es un Topic interactivo donde la comunidad puede publicar hallazgos, ya sea aprendiendo nuevas herramientas o navegando los desafíos del trabajo diario. Este espacio está abierto para todos, desde novatos en el mundo del testing hasta veteranos experimentados, ofreciendo una plataforma para compartir esas joyas de sabiduría que han encontrado en su camino.
Compartir para crecer
En El Dojo, alentamos a nuestros miembros a publicar hallazgos útiles, trucos, guías paso a paso, y cualquier recurso que consideren valioso para el colectivo. ¿Descubriste una manera ingeniosa de automatizar pruebas con Selenium? ¿Tienes una técnica especial para usar Cypress.io que ahorra tiempo? ¡Este es el lugar para compartirlo! No solo se trata de resolver problemas, sino de mostrar cómo lo hiciste, proporcionando valor real a otros miembros que puedan enfrentar desafíos similares.
Visibilidad y reconocimiento
Lo mejor de compartir en El Dojo no es solo la satisfacción de contribuir al crecimiento de otros; también es una oportunidad única para ganar visibilidad y reconocimiento dentro de la comunidad y más allá. Cada artículo compartido en El Dojo será promovido en las redes sociales de Free Range Testers, destacando al autor y su contribución. Esta es una excelente manera de construir tu reputación en el campo, conectarte con otros profesionales y mostrar tu expertise y soluciones creativas al mundo.
¿Cómo participar?
Participar es fácil. Con una cuenta activa en Free Range Testers, simplemente dirígete a la sección El Dojo en la sección Comunidad de Free Range Testers y comienza a compartir tus experiencias, soluciones y aprendizajes. No importa si es un pequeño truco o una guía extensa; si crees que puede ayudar, queremos verlo. Y recuerda, la calidad y la originalidad cuentan, así que toma ese espíritu de innovación y úsalo para inspirar a otros.
Únete a El Dojo hoy
Ayuda a otros a aprender, gana reconocimiento por tu trabajo y sé parte de una comunidad que valora la colaboración y la innovación. ¡Estamos ansiosos por ver tus contribuciones y celebrar juntos el arte del testing de software!
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class UITestSample {
private WebDriver driver;
@BeforeMethod
public void setup() {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
driver = new ChromeDriver();
driver.get("http://example.com/login");
}
@Test
public void testSuccessfulLogin() {
WebElement usernameField = driver.findElement(By.id("username"));
WebElement passwordField = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("loginButton"));
usernameField.sendKeys("testUser");
passwordField.sendKeys("testPassword");
loginButton.click();
WebElement successMessage = driver.findElement(By.id("success"));
Assert.assertTrue(successMessage.isDisplayed());
}
}
Como parte de un video en el que estoy trabajando sobre una idea que empezó a flotar en mi cabeza les traigo una suerte de ejercicio/challenge. Tienen que reemplazar Gherkin y su objetivo por algo que ofrezca Playwright, sin agregar NINGUN plugín ni nada extra. Quiero que me cuenten cómo lo harían y por qué. Las soluciones más copadas las muestro en el video.
Por ejemplo: Yo voy a tantear la obvia idea de usar Describe y Steps para mostrar los casos de prueba en un lenguaje natural para personas no técnicas. Quizás debería hacer un dry run para mostrar las estructuras? No se, va a ser parte del experimento.
Un primer intento en el que quedaron afuera un par de cosas como:
1- Reusabilidad de los steps (creo que se puede hacer fácil con funciones).
2- Que sea más accesible para un BA y no que tenga que ejecutar para ver qué se está haciendo a nivel texto de los scenarios.
Lujazo de aporte! Recomendación, usando el slash podés darle formato de bloque de código al código para que quede más chuletón.