martes, 15 de abril de 2025

Como dar click a un elemento desde la consola de chrome (chromedevtools)

 Buenas lectores.

Algunas veces queremos validar porqué nuestras automatizaciones no dan click sobre un elemento que se encuentra presente cuando validamos los informes o simplemente haciendo debug encontramos que está allí presente pero que el robot no es capaz de hacer click.


Una de las estrategias para validar que puede estar pasando es realizando click mediante la consola de chrome, esto nos permite validar que no sea un error del aplicativo y que sea necesario reportarlo a desarrollo.


Sentencia por js:

document.getElementById('button1').click();

Sentencia por jquery:

$('#button1').click()



Referencias:https://automatizaciondefuncionales.blogspot.com/2023/07/como-dar-click-un-elemento-desde-la.html

Como saber que versión de java necesito para correr algún proyecto

 Buenos días lectores.

Normalmente cuando agregamos alguna libreria a nuestro proyecto o simplemente cuando descargamos nuevamente un proyecto antiguo o nuevo a nuestro espacio de trabajo, nos encontramos con el siguiente error:

Class has been compiled by a more recent version of the Java Environment (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0.

En tu caso puede variar el número de la versión, en todo caso cuando este mensaje de error se muestra es necesario saber que versión de java necesitamos descargar para ejecutar nuestro proyecto, para eso vamos a mirar la siguiente tabla:


49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
59 = Java 15
60 = Java 16
61 = Java 17
62 = Java 18
63 = Java 19
64 = Java 20

Una vez revisada la versión que necesitamos, simplemente vamos a la configuración del proyecto o de la ejecución y seleccionamos el jdk que necesitamos: 



En este ejemplo estoy usando eclipse, pero el concepto aplica para cualquier IDE que estes usando.


Saludos.


Fuentes:https://automatizaciondefuncionales.blogspot.com/2023/08/como-saber-que-navegador-esta.html

Esperar a que un elemento tenga texto Playwright desde javascript

 Buenas tardes lectores.

Voy a seguir publicando algunas cositas sobre Playwright, esto porque veo que es una gran herramienta para llevar de la mano junto a SerenityBDD. En esta ocasión vamos a revisar de una manera sencilla como podemos esperar el texto de un elemento y no seguir el proceso hasta que tengamos el valor:

var idGeo: string | null = await page.textContent('#div_map');
  console.log(idGeo);

  while (idGeo === null || idGeo.length === 0) {
    idGeofence = await page.textContent('#div_map');
    console.log(idGeofence);
  }



Se puede observar lo siguiente:

Almacenamos de forma controlada el valor del texto que trae Playwright a la variable idGeo
Luego comparamos de forma controlada que sea null o vacía
Repetimos ciclo hasta que tengamos un valor y seguimos con la automatización.

Es todo, sencillo y funcional. Recuerden que falta controlar el ciclo para que no sea infinito.

Saludos cordiales.


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/01/esperar-que-un-elemento-tenga-texto.html

Esperar a que un elemento desaparezca en Playwright (Manual)

 Buenas lectores.

En este post vamos a observar dos cosas, la primera como hacer un condicional o ciclo para que la automatización espere hasta que un elemento ya no sea visible y adicional observaremos como realizar un control a una acción sin que se detenga nuestra automatización:

 

let visible = await page.locator('#btn').isVisible();  
  while (visible) {    
    try {
    await page.locator('#btn').click({ timeout: 1000 });    
    } catch (error) {
      console.error('El elemento no se encontró o no se pudo hacer clic en él.');
    }
    visible = await page.locator('#btn').isVisible();
    console.log(visible);
  }  


Observamos lo siguiente:

Almacenamos en la variable visible el valor booleando que nos retorna si es visible o no.

Mientras es visible tratamos de dar un clic a un elemento, en caso que ya no sea visible por los milisegundos, al estar dentro del try nos retorna que ya no lo puede ver y sigue el proceso.

De esta manera tan simple podemos controlar y esperar que algunos controles que se resisten a seguir con las funciones normales que nos ofrece el framework se controlen.

Saludos.


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/01/como-tener-un-condicional-en-playwright.html

Tiempo de espera muerto / estático / explicito en Playwright

 Buenas lectores.

En ocasiones necesitamos esperar un tiempo específico debido a que no contamos con alguna referencia o elemento que nos facilite seguir con el proceso. En estos casos usamos tiempos muertos los cuales no son buenos, nadie los quiere pero algunas veces son necesarios.


await page.waitForTimeout(1000);


Cabe anotar que el tiempo es en milisegundos como casi en todas las herramientas, en este caso es equivalente a esperar 1 segundo. Es decir, si quieres que espere 2 segundos sería 2000, 3 segundos = 3000.


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/01/tiempo-de-espera-muerto-explicito-en.html

Elementos SVG y/o mapas con selenium en python

 Buenas lectores

Un reto muy interesante que se nos puede presentar es cuando tratamos de interactuar con elementos en un mapa o en un gráfico, normalmente los encontramos como SVG.

El resto consiste en que normalmente no encuentra los elementos a pesar de que hagamos correctamente el cambio al iframe donde se supone están los controles. Es algo complicado y puede llegar a frustrarnos.

Soluciones hay varias, pero hoy vamos a usar las mas comunes y mas estables.


Usando xpath:

//div[@id="map"]//*[name()="svg"]/*[name()="g"]

//div[@id="map"]//*[name()="svg"]/*[name()="g"]/*[name()="image"]


En muchas ocasiones no funciona el xpath, esto porque pareciera que los elementos no están en el DOM o por lo menos , no en el orden que los vemos ya construidos. Para esos casos podemos recurrir a CSS

En este ejemplo vamos a capturar todos los puntos del mapa y luego los recorremos pulsando click sobre cada uno de ellos:


from selenium import webdriver

driver.get("tu_url_aquí")

elements = driver.find_elements_by_css_selector('[id^="OpenLayers.Geometry.Point_"]')

for element in elements:

    element.click()


Con esto podemos interactuar con todos los elementos del mapa, recuerdo agregar un try y catch por cada click debido a que puede que encuentre elementos los cuales no sean interactuables.


Saludos


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/02/como-interactuar-con-elementos-svg-yo.html

Como hacer click a un elemento escondido en Playwright

 Buenas lectores.

En la mayoria de frameworks que se usan para automatizar pruebas funcionales encontramos funciones que nos permiten realizar click forzados, esto es necesario cuando un elemento se encuentra oculto y necesitamos ejecutarlo. Normalmente esto no debería funcionar así puesto que un usuario no puede ver elementos ocultos pero... a veces es nuestra magía para poder simular a nuestro usuario final (enredado lo sé).


En todo caso, cuando necesitamos hacerlo usando js es cuando se complica un poco, sin embargo existe una funcion que simula el click y nos puede sacar de los apuros:


page.getByTestId('#id').dispatchEvent("click");


Cuando necesitamos pulsar un botón y este se resista pero es visible, podemos usar el force:


click("//button[contains(@id, 'secondaryDownload')]", { force: true })


Fuentes:

https://automatizaciondefuncionales.blogspot.com/2024/02/como-hacer-click-un-elemento-escondido.html