Comunidad Free Range Testers

A partir de $0/ mes
El hub principal donde la comunidad Free Range se junta a hablar de Testing, Software y Calidad.

Popup de cookies y cómo manejarlos en Playwright

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!!!!

API Testing con RobotFramework

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!!

Patito Miner
May 15, 2024

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.

Primera aproximación con RobotFramework

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!!!

API Test automatizado desde Jenkins

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

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!!

Este es el Dojo QA, el mejor lugar para hacerte conocer a través de Free Range Testers!

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!

Oh no! Este Test tiene un par de cosas no muy lindas...podrías decir cuáles y proporcionar una mejor versión?

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());
    }
}

Gherkin se muere y Playwright es el único que puede salvarlo!!!

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.

Pato Free Range Testers
Sep 4, 2023

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.