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