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 |
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!
1 Comentarios
Great article, look forward to the part two
ResponderBorrar