Sobre Page Object

¿Qué se entiende por Page Object?

El Page Object es un patrón de diseño utilizado en la automatización de pruebas de software.

Básicamente, es una manera de estructurar y organizar el código que automatiza las pruebas de interfaces de usuario (UI). 

Imaginemos que cada página web de tu aplicación se convierte en una clase en tu código. Cada clase contiene los métodos que interactúan con los elementos de esa página, como botones, campos de texto y enlaces.

Te lo paso a otro lenguaje como para que sea más comprensible el concepto:

Imagina que estás trabajando en un proyecto de construcción de una casa. Tienes planos detallados que te muestran dónde van las puertas, las ventanas, los muebles, etc. Cada plano te da una vista clara de una parte específica de la casa. El Page Object es como tener un plano detallado para cada página de un sitio web o aplicación. Cada «plano» (Page Object) describe cómo interactuar con diferentes partes de esa página, como botones, campos de texto y enlaces.

¿En qué situaciones lo debemos aplicar?

El patrón Page Object se aplica principalmente cuando estás automatizando pruebas para aplicaciones web. Es particularmente útil en las siguientes situaciones:

  • Aplicaciones con interfaces de usuario complejas: Cuando la interfaz de tu aplicación tiene muchas páginas o elementos interactivos.
  • Proyectos a largo plazo: Si estás trabajando en un proyecto que requerirá mantenimiento y actualizaciones frecuentes.
  • Equipos grandes: Cuando varios desarrolladores y testers están trabajando juntos, ayuda a tener un código organizado y fácil de entender.

¿Qué herramientas puedo usar?

El patrón Page Object se puede utilizar con varias herramientas de automatización de pruebas. Algunas de las más conocidas incluyen:

  • Selenium WebDriver: Una de las herramientas más utilizadas para la automatización de navegadores web.
  • Appium: Utilizado para la automatización de aplicaciones móviles.
  • Cypress: Una herramienta moderna para pruebas end-to-end de aplicaciones web.
  • WebDriverIO: Un framework basado en Node.js para la automatización de navegadores.

La elección de alguna de estas herramientas pasará por una decisión muy específica que tendrá que tomar el líder técnico junto con el equipo para luego si correspondiera, elaborar una propuesta en la que se fundamente el porqué de la elección, las ventajas que tendrá aplicar la práctica e implementar la herramienta, y los beneficios económicos que traerá aparejado, razón por lo cual habrá que hacer varios tipos de análisis, entre ellos el ROI. Mucho tema aquí para tratar y que daría para otro artículo e incluso para una charla. Si te interesa, contáctame por LinkedIn.

¿Cuál es el lenguaje con el cual se puede interactuar?

El patrón Page Object puede ser implementado en varios lenguajes de programación, dependiendo de la herramienta de automatización que estés utilizando. Los lenguajes más comunes incluyen:

  • Java
  • Python
  • JavaScript
  • C#
  • Ruby

Por ejemplo, si estás utilizando Selenium WebDriver, puedes escribir tus Page Objects en cualquiera de estos lenguajes.

Aquí de nuevo la mención anterior, cuando se transita el momento de la elección de una herramienta para implementar e implantar una nueva práctica, no es un tema menor y que debe ser evaluado detenidamente porque hay que terminar interactuando con varias áreas. Mucho tema aquí para tratar y que daría para otro artículo e incluso para una charla. Si te interesa, contáctame por LinkedIn.

¿Qué beneficios tiene aplicar Page Object?

El uso del patrón Page Object ofrece varios beneficios:

  1. Mantenibilidad: Al separar la lógica de las pruebas de la lógica de la interfaz de usuario, el código es más fácil de mantener y actualizar. Para el otro ejemplo que te dí: Si algo cambia en la página, solo necesitas actualizar el «plano» (Page Object) y todas las pruebas que usan ese plano se actualizarán automáticamente.
  2. Reusabilidad: Los métodos dentro de los Page Objects pueden ser reutilizados en diferentes pruebas. Para el otro ejemplo que te dí: Puedes usar el mismo Page Object en diferentes pruebas, ahorrando tiempo y esfuerzo.
  3. Legibilidad: El código de las pruebas es más fácil de leer y entender porque las acciones en la interfaz de usuario están claramente definidas en los métodos de los Page Objects.
  4. Reducción de duplicación: Evita la duplicación de código al centralizar las interacciones con la interfaz de usuario en una sola clase. Para el otro ejemplo que te dí: Evita escribir el mismo código muchas veces, centralizando las interacciones con la página en un solo lugar.

¿Cuáles son las ventajas y desventajas de usar Page Object?

Ventajas:

  • Organización: Mantiene el código limpio y organizado.
  • Escalabilidad: Facilita la adición de nuevas pruebas y el mantenimiento de las existentes.
  • Separación de preocupaciones: Separa la lógica de las pruebas de la lógica de la interfaz de usuario.

Desventajas:

  • Curva de aprendizaje: Puede requerir tiempo para aprender y establecer correctamente la estructura de Page Objects.
  • Sobrecarga inicial: La configuración inicial puede ser más compleja y llevar más tiempo.
  • Actualizaciones costosas: Si la interfaz de usuario cambia con frecuencia, puede ser costoso mantener actualizados los Page Objects.

¿Cuáles son los riesgos que se deben tener en cuenta al implementar Page Object?

Algunos riesgos a considerar al implementar Page Object incluyen:

  1. Dependencia en la estructura de la UI: Si la interfaz de usuario cambia con frecuencia, tendrás que actualizar los Page Objects constantemente.
  2. Mala implementación: Si los Page Objects no se implementan correctamente, pueden convertirse en un obstáculo en lugar de una ayuda. Es importante seguir buenas prácticas y mantener el código limpio.
  3. Sobrecarga de mantenimiento: Si no se gestionan adecuadamente, los Page Objects pueden convertirse en una carga de mantenimiento, especialmente en proyectos grandes.

Ejemplo práctico

Para ilustrar cómo funciona el patrón Page Object, consideremos un ejemplo sencillo: una página de inicio de sesión en un sitio web.

Página de inicio de sesión:

Imagina que tienes una página donde los usuarios ingresan su nombre de usuario y contraseña para iniciar sesión.

Elementos en la página:

  • Un campo de texto para el nombre de usuario.
  • Un campo de texto para la contraseña.
  • Un botón de inicio de sesión.

Page Object:

Un Page Object para esta página de inicio de sesión describiría cómo interactuar con estos elementos. Aunque no vamos a ver el código, piensa en esto como un conjunto de instrucciones claras:

  • Ingresar nombre de usuario: Instrucciones para escribir el nombre de usuario en el campo correspondiente.
  • Ingresar contraseña: Instrucciones para escribir la contraseña en el campo correspondiente.
  • Hacer clic en el botón de inicio de sesión: Instrucciones para hacer clic en el botón de inicio de sesión.

Caso de prueba:

Con el Page Object, puedes crear un caso de prueba que siga estas instrucciones para verificar que el inicio de sesión funciona correctamente.

Conclusión

El patrón Page Object es una técnica poderosa para mantener las pruebas de sitios web y aplicaciones organizadas y fáciles de mantener. Aunque requiere un poco de esfuerzo inicial para configurarlo, los beneficios a largo plazo en términos de claridad, mantenibilidad y reutilización hacen que valga la pena.

Gus Terrera

Apasionado por el agile testing y la ia.