jueves, 19 de enero de 2017

Automatización: POM (Page Object Model)

Comenzaré esta nota describiendo e intentando explicar qué es POM y cómo se utiliza.  En verdad es algo sencillo, tanto que podría resumirse en apenas una frase.  POM es encapsular la interacción con el html, es brindar un servicio a quien realice la automatización para disminuir el costo de mantenimiento y creación de los scripts de prueba.

El modelo Página-Objeto debe pensarse como la abstracción de la interfaz de usuario, en este caso una página web, que conoce y sabe cómo interactuar con ella, pero que oculta toda su complejidad y le facilita a quien consuma el modelo la interacción con dicha web.  Para lograr este objetivo se modela un objeto que representa la página o una porción de ella, que conoce los controles que esta posee, como interactuar con ellos y la interacción que pueda haber entre los mismos.  De esta forma se separa toda la lógica que relaciona el caso que se desea probar con el objeto de prueba dejando que el script interprete el comportamiento del objeto de prueba, y el modelo se ocupe de llevar a cabo las acciones pertinentes sobre este.  Así será el script quien realice las aserciones sobre lo que el modelo le devuelva luego de haber interactuado con el objeto.

Para que esto funcione bien es necesario entonces que el modelo conozca con suficiente profundidad al objeto de prueba y sepa cómo lograr los comportamientos deseados.  Esto podemos lograrlo exponiendo métodos diferentes, por ejemplo en el caso de querer realizar una validación podríamos exponer un método para el funcionamiento correcto y otro para la excepción, de esta forma será el “usuario” del modelo quien decida cuál de ellos invocar en función de lo que desee probar.
El siguiente fragmento ejemplifica el punto anterior.

Modelo:
public class MiPagina
{
public bool EjecutarConContenidoCorrecto(string nombre, string apellido, string documento)
{
                bool resultadoEjecucion;
//Lógica para Búsqueda de elementos, colocación de valores, ejecución del formulario y determinación de la correcta ejecución.
return resultadoEjecucion;
}
public string EjecutarConContenidoErroneo(string nombre, string apellido, string documento)
{
                string mensajeDeError;
//Lógica para búsqueda de elementos, colocación de los valores, ejecución del formulario y obtención del mensaje de error.
return mensajeDeError;
}
}

Scripts
public void ValidacionFormularioRegistro()
{
                MiPagina formularioRegistro = new MiPagina();
assertText(formularioRegistro. EjecutarConContenidoErroneo(“pepe”, “rodriguez”, “30-9658748-3”));
}
public void RegistrarUsuario(string nombre, string apellido, string documento)
{
                MiPagina formularioRegistro = new MiPagina();
assertTrue(formularioRegistro. EjecutarConContenidoErroneo(nombre, apellido, documento));
}

Aplicando este modelo logramos que quien consuma el servicio provisto por nuestra clase se despreocupe por cómo hacer para hallar los elementos, y en su lugar se concentre en determinar qué hacer con ellos y cómo determinar si su funcionamiento es correcto.  Además, como consecuencia de este encapsulamiento se abarata el costo de mantener los scripts de prueba puesto que en el caso en donde la lógica funcional sea la misma, en el caso propuesto rellenar los campos de un formulario y presionar el botón que lo envía, pero varíe la aplicación técnica, por ejemplo posición o nombre de los controles, el cambio se realizaría dentro del modelo dejando los scripts intactos o con modificaciones mucho menores.

Hasta aquí llevé adelante un aplicación objetiva de este modelo, ahora voy a expresar opiniones personales basadas en mi interpretación y experiencia, por lo tanto suceptible a completos desacuerdos.


A mi parecer POM es una práctica interesante pero limitada en cuanto a que el modelo, en mayor o menor medida, se ata al objeto de prueba y por ende sólo es útil y aplicable en él.  Es cierto que esto se puede extender y generalizar un poco, peor aún así, y siempre desde mí punto de vista y limitada experiencia, estaremos atados a cierta estructura.  Quienes hayan hablado conmigo sobre automatización sabrán que me salgo bastante de los estándares recomendados y que tengo un punto de vista y un objetivo que apunta a desarrollar algo que nos permita reducir al máximo el costo de la automatización.  En esto estuve trabajando hace un tiempo y ya tengo algo bastante pulido para presentar así que posiblemente pronto suba novedades sobre este tema.

No hay comentarios:

Publicar un comentario