Patron Page Object para pruebas Automatizadas


Definición

Básicamente es un patrón de diseño que se ha popularizado para mejorar el mantenimiento de las pruebas y reducir el código duplicado. Esto ocurre ya que el patrón Page Object permite separar el comportamiento de una pagina de los detalles de su implementación, es simplemente una clase que encapsula los detalles de implementación de una pagina web, permitiendo que la automatización se centre solamente en el comportamiento.

Tratemos de simplificar aun mas la definición, creamos los page objects para agrupar comportamientos comunes y generar una capa de abstracción con la aplicación con el objetivo de reducir el trabajo de mantenimiento y que la estructura de los tests reduzca complejidad. Por eso comúnmente tenemos un Page object donde agruparemos aquellos métodos comunes a todas las paginas y luego vamos creando un page object para cada grupo de elementos que se relacionen de alguna manera (ya sea una barra de menú que se repite en varias paginas, una pagina con una funcionalidad especifica, un popup que aparece en varias paginas, etc…). Lo mismo va a aplicar para los tests, ya que podemos centralizar en un TestPage object todo lo relacionado a la configuración de los tests y métodos de validación/generación de datos.

Pero vamos por una definición mas completa, siguiendo la estructura con que se define un patrón:

Intención

Se esta desarrollando pruebas automatizadas para realizar un flujo a través de diferentes paginas. La aplicación soporta múltiples interfaces de usuarios para diferentes plataformas (desktop/mobile). Se quiere seguir utilizando los tests en un futuro cuando la aplicación cambie de flujo y de UI.

Problema

Tus pruebas automatizadas necesitan adaptarse a los cambios en la interfaz de usuario fácilmente.

Motivación

Las pruebas automatizadas pueden necesitar ejercitar diversas interfaces de usuario para diferentes dispositivos como un sitio web normal en un navegador de escritorio y una versión móvil para un celular, pero desea utilizar los mismos datos de prueba para las dos versiones. También se puede necesitar correr las pruebas en distintas navegadores y ambientes.

Aplicabilidad

Crear una clase con métodos apropiados para cada página web o grupo de elementos de una página (navegación principal, grilla de datos, etc …). Los métodos de la clase deben reflejar las operaciones de interacción para la página en un nivel de negocio. Además, cada clase debe proporcionar campos apropiados para cada elemento  con que el usuario está interactuando.

Consecuencias

Puede adaptar sus pruebas automatizadas a los cambios en la interfaz de usuario cambiando los PageObjects relacionados. Los PageObjects proporcionan una capa para desacoplar los cambios en la aplicación bajo prueba de sus datos de prueba. Usted puede cambiar la jerarquía PageObject para cada dispositivo.

Implementación

Poner esfuerzo en el diseño de la jerarquía PageObject para reflejar el flujo de negocio a través de la aplicación. Cuando el flujo a través de la aplicación cambia, es necesario cambiar el código que conecta la representación textual de las pruebas y la jerarquía PageObject. La jerarquía PageObject está estrechamente unida a la forma en la aplicación está diseñadas. Si las páginas de la aplicación cambian de formato o contenido, sus PageObjects tendrán que cambiar de la misma forma.

Ejemplos

Veamos un poco de código de ejemplo para hacerlo aun más gráfico:

Código sin Page Object Pattern

Aquí podemos ver que tenemos todo el código en una sola clase de test con una gran cantidad de métodos y sobre el cual se hace difícil de seguir y a medida que la cantidad de test crezca no sera muy escalable, al igual que ante cualquier cambio tendremos que rebuscarnos de encontrar lo que necesitamos actualizar

Código con Page Object Pattern

Aquí podemos ver que la estructura de las clases se aprecia mas ordenada y se ve una capa que separa los tests de los posibles comportamientos de las paginas, en caso de querer actualizar algo podemos encontrarlo fácilmente y no será  necesario actualizar en ningún otro lugar. A medida que la cantidad de test crezca, los mismos se van a ir agregando de manera orgánica haciendo que se pueda escalar fácilmente.

 

Te gustó el post? Quieres contribuir? Contribute with the Blog

Un pensamiento en “Patron Page Object para pruebas Automatizadas”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s