Entradas

Mostrando entradas de marzo, 2023

Como trabajar con iframes manteniendo la arqutiectura de screenplay

Buenas lectores. A estas alturas alguno en determinado momento le ha sacado tiempo un iframe, estas pequeñas piedras en el zapato que nos diculta la fluidez de interactuar con los elementos de la web. En la mayoria de veces que me he enfrentado con los iframes ha sido en sitios algo viejos y por lo tanto las automatizaciones estaban desarrollada bajo el page object model. Actualmente es mucho mas fluido trabajar con screnplay es por eso que hoy vamos a revisar como lo podemos hacer. Lo primero es determinar que todo en screenplay lo trabajamos por Targets, a diferencia de page object model que todo son WebElementFacade que en sí es casi un WebElement pero con esteroides. Para crear nuestro iframe como target usamos lo siguiente: private static IFrame PROFILE_MARCO = IFrame.withPath(By.id("ib-iframe-messaging")); y para buscar un elemento dentro del iframe public static final Target TITTLE_MARCO = Target.the("icon Marco over map").inIFrame(PROFILE_MARCO).locatedBy(...

Realizar una prueba de performance de forma online

Imagen
Buenas lectores Cuando queremos hacer una prueba de performance sencilla y sin instalar nada, esta es una buena opción, sin embargo se debe tener en cuenta que funciona para sitios públicos y que evalua criterios de carga distintos a los que se pueden obtener con concurrencia usando Jmeter. Sitio:  https://gtmetrix.com/ Como se ve: Como se puede observar la información es muy util y pueden ir comparando con los tiempos de carga que les puede dar el mismo dev tools de chrome. Saludos.

Como generar data sources (fuente de datos) para usar en la automatización y/o pruebas de performance

Imagen
Buenas lectores Cuando queremos automatizar y/o probar servicios web nos encontramos con la necesidad de generar una fuente de datos, sin embargo, es una tarea algo tediosa y aburrida. En este caso vamos a revisar una herramienta (página) que nos facilita la vida para estas tareas. Sitio:  https://www.mockaroo.com/ Formatos comunes que permite auto generar: CSV JSON SQL Excel XML Como se ve: El funcionamiento es sencillo, agregas los campos que necesites, luego seleeciona el formato de salida y finalmente descargas. Con esto ya tienes tu fuente de datos lista para funcionar Saludos.

Imprimir el texto de un elemento desde la consola de chrome

Buenas lectores. En ocasiones nos encontramos con la necesidad de validar si el texto que tiene un elemento es precisamente el texto que vamos a usar en nuestros asserts. También puede suceder que tengamos varios elementos concatenados y que queramos validar cual es el elemento del texto que necesitamos en nuestra automatización, para esto podemos imprimir el texto desde el mismo navegador sin necesidad de estar ejecutando una automatización. Para ello vamos realizar lo siguiente: var elements = document . getElementsByTagName ( "blockquote" ); for ( var prop in elements) { if (elements. hasOwnProperty (prop)) { console . log (elements[prop]. innerHTML ); } } Simplemente cambia el tagName por el que necesites. Cabe anotar que en la segunda referencia pueden revisar otras sentencias para buscar elementos. Fuentes: https://stackoverflow.com/questions/45686985/how-to-access-html-element-text-in-chrome-devtools-console https://www.w3schools.com/jsref/met_document_get...

Cambiar el thread.sleep para no tener deuda técnica

Buenas lectores. Siempre en nuestras automatizaciones nos encontramos con el problema que el robot cuando se ejecuta va muy rápido, esto ocasiona que los test fallen. En esta situación necesitamos que el robot espere algún elemento para poder continuar la ejecución de forma correcta. Existen muchas formas de poder lograrlo, aquí algunos ejemplos usando SerenityBDD: Con screenplay: Ejemplo 1: jadcode.attemptsTo( WaitUntil.the(LocationForm.BTN_CREATE,isVisible()).forNoMoreThan(2).seconds(), Click.on(LocationForm.BTN_CREATE));   Ejemplos 2: jadcode.attemptsTo(Click.on(LocationForm.BTN_CREATE).afterWaitingUntilEnabled()); jadcode.attemptsTo(Click.on(LocationForm.BTN_CREATE).afterWaitingUntilPresent()); Ejemplo 3: jadcode.attemptsTo(Click.on(LocationForm.BTN_CREATE.waitingForNoMoreThan(Duration.ofSeconds(2)))); Con pageobject: Ejemplo 1: waitForPresenceOf("//h2[.='A title that is not immediately visible']"); Ejemplo 2: waitFor("//h2[.='A title that is not immedia...

Invocar un actor en cualquier parte de la automatización con serenityBDD

Buenas lectores. Alguna vez han necesitado invocar el actor en algún punto de la automatización que no sea en los steps? por ejemplo: WebElement element = MAP_ROUTE.of(MAP_ROUTE_NAME_MAP).resolveFor( currentActor() ).getElement(); Como pueden observar necesitemos resolver un target pero resulta que en la clase o método no recibimos ningún actor. Existen diferentes formas de abordar el problema, de momento para limitar a lo más común voy a citar 3 ejemplos: 1. Recibir el Actor en el método: Con esto solucionamos directamente nuestro problema y sin mayores contratiempos  public WebElement traerMapa (Actor actor){  return MAP_ROUTE.of(MAP_ROUTE_NAME_MAP).resolveFor(actor).getElement(); } El problema es que no es una buena práctica, con solo pensar que ya se vuelve un parámetro de entrada ya sabemos como pinta la cosa. 2. Recibir el Actor por almacenamiento: Si ya has visto mi blog encontraras muy familiar la siguiente manera de resolver el problema En el step almacenamos el actor...