Te va a interesar!

6/recent/ticker-posts

Selenium selfhealing: Parte 1


Si recuerdan, hace unos posts atrás les comentaba sobre un proyecto personal que me puse para este 2019 (además de los geniales tutoriales que pueden encontrar en el Patreon). El proyecto en si es una librería para Selenium que ayude con el problema de los locators cambiantes. Esto es algo que todo aquel que automatice UI sabe que es un calvario. Los tests fallando no porque exista un error genuino en la aplicación, sino porque un ID fue cambiado y ahora Selenium no sabe cómo encontrar el elemento.

Hay ya en el mercado frameworks que hacen ésto, pero son todos pagos. Yo quiero hacer mi propia librería y (por ahí) compartirla con el mundo. Esto significaría un alivio en la carga de mantenimiento de cualquier proyecto que use Selenium, como así también un avance lógico hacia AI y Machine Learning.

Por un lado, mientras brainstormeaba cómo sería esta nueva locura, se me ocurrieron dos partes o módulos: Uno es una State Machine muy sencilla que se encargue de las transiciones entre estados a la hora de realizar los tests automatizados:
Cortesía de otro que intentó y no llegó a bien puerto hace unos años
Pero la pieza más importante es la que me encuentro desarrollando ahora: Lograr que, a la hora de localizar un Webelements inicialmente, nos traigamos todos los atributos generando así un mapa completo de cómo se ubica en la página. Con eso, al momento de no ser encontrado por el atributo que originalmente se usaba, podríamos usar la información recopilada para "suponer" dónde está el elemento que queremos en base a los demás atributos, pudiendo modificar el que cambió por el nuevo.

A priori se me ocurren un millón de problemas (y eso que debe haber otro millón que todavía no se me ocurren porque no llegué a eso), como:

  • Voy a necesitar un repositorio de WebElements para salvar esa lista de atributos?
  • Cómo construir el locator cuando el original no sirva por la modificación del atributo?
  • Voy a usar un XPath relativo y jugar desde ahí con los atributos más sólidos para buscar el elemento?
  • La lista de atributos, va a tener una "prioridad" o importancia según cuál cambia con menos frecuencia?
A todo ésto, el gran concepto de moda en Automation ahora como lo es Machine Learning, en esto que les estoy mencionando hasta ahora...está ausente. Cero Machine Learning en todo este concepto de momento muchachos. Lo que si hay es una rudimentaria Inteligencia Artificial en forma de Finite State Machine. 

De momento tengo una función que me trae todos los atributos de un WebElement que uso, localizando originalmente por su XPath relativo. El próximo paso es crear mi repositorio de WebElements para salvar todas sus propiedades y de ahí elegir el grupo que más sentido tenga cuando el criterio original falle. 

Los voy a mantener actualizados!

Publicar un comentario

1 Comentarios