Hacks de selenio para principiantes

Foto de cabeza de Wilhelm Haaker, arquitecto sénior de soluciones, Parasoft Corporation

Por Wilhelm Haaker

Octubre 15 de 2019

7  min leer

Si está buscando una hoja de trucos de Selenium para comenzar con las pruebas web de Selenium, aquí hay un desglose lleno de experiencia sobre cómo comenzar con Selenium.

Durante mi experiencia de aprendizaje de Selenium, descubrí algunos consejos y trucos para comenzar. Aquí hay algunos recursos excelentes que también podrían ayudarlo.

Recientemente aprendí a usar Selenium, debido al nuevo producto de Parasoft para probadores de Selenium, Parasoft Selénic. Ya tenía algo de experiencia con pruebas web, escribiendo código Java y JUnit, pero nunca antes había usado Selenium. Aquí hay algunos recursos útiles que encontré útiles para mejorar.

¿Qué es el selenio?

Lo primero es asegurarse de comprender la diferencia entre Selenio IDE e Selenio WebDriver. Pensé que Selenium IDE, un programa de grabación / reproducción de GUI construido sobre Selenium WebDriver, sería una excelente manera de comenzar, pero rápidamente me encontré con limitaciones en las que la reproducción no tuvo éxito con localizadores defectuosos / faltantes, y me di cuenta de que cualquier probador serio de Selenium está escribiendo código usando Selenium WebDriver. La suerte estaba echada, tenía que empezar a escribir código.

Introducción a Selenium WebDriver

Las bibliotecas de Selenium WebDriver están disponibles para varios idiomas diferentes, lo que hace que Selenium sea accesible para una amplia audiencia de personas. Como me siento más cómodo escribiendo código en Java, me quedé con eso. (Además, aunque JUnit no es necesario para las pruebas de Selenium en Java, no veo por qué nadie no lo usaría, ya que viene con un montón de características diseñadas específicamente para escribir casos de prueba en Java).

Por último, si iba a escribir JUnits, pensé que también podría escribirlos en un IDE. Hay dos IDE que se utilizan principalmente en la industria para Java: Eclipse e IntelliJ. La mayor parte de mi carrera ha consistido en el uso de Eclipse, así que me quedé con eso.

Habiendo tomado estas decisiones, estaba listo para comenzar.

Habilidades que debe conocer sobre el selenio

Antes de comenzar, asegúrese de tener algunas habilidades necesarias para comenzar con los conceptos básicos de automatización de pruebas.

Habilidades Web

Familiaridad con HTML y CSS: No debe tener miedo de la fuente de la página de un sitio web y debe comprender cómo la fuente de la página se traduce en lo que ve en el navegador. Si HTML es totalmente ajeno a usted, le sugiero algo de educación básica. Aquí hay un gran sitio web que me ayudó en mi educación temprana a la web:

Herramientas de desarrollo del navegador y XPath: Otra habilidad fundamental es comprender cómo ubicar elementos en una página. Selenium WebDriver admite varios mecanismos para hacer esto, a los que pronto estará expuesto. Querrá sentirse cómodo usando las herramientas de desarrollo del navegador para ubicar elementos en una página, y aquí hay un excelente tutorial para ponerlo al día con Chrome:

Habilidades de codificación

Si está buscando realizar la transición a un puesto de ingeniería de automatización de pruebas, deberá desarrollar algunas habilidades de codificación. Antes de asustarse, la buena noticia es que escribir código para automatizar las pruebas web en Selenium es relativamente fácil. De hecho, creo que Selenium es una excelente manera de aprender a codificar; el código que va a escribir está muy limitado, por lo que es menos probable que se sienta abrumado por completo. No debería ser difícil encontrar tutoriales y lecciones gratuitos para comenzar con el idioma que elija. Con el fin de aprender lo que necesita saber sobre Selenium, encontré un fantástico tutorial que cubre Java y Selenium para un principiante total:

Si elige Java, le recomiendo que también aprenda JUnit, que es un marco de prueba popular para Java. Aquí hay un gran tutorial que cubre JUnit Y la lección final cubre la aplicación de JUnit con pruebas de Selenium:

Configuración de su entorno

Además del Tutorial de toolsqa, otro recurso que me encontré frecuentando fue este:

Estos dos recursos cubrirán todos los temas necesarios para que configure su entorno con Eclipse, Java, JUnit 4, Selenium WebDriver y Maven.

… ¿Maven? ¿Que es eso? Un comentario que haré es que la mayoría de los tutoriales que encontré ponen a Maven como un tema avanzado más abajo en la lista. Maven es una herramienta de compilación que hace que compilar, probar e implementar código sea más fácil de administrar con todas sus dependencias requeridas. Al igual que JUnit, Maven es otro elemento opcional, pero quiero mencionarlo ahora porque facilita la configuración de su proyecto una vez que sepa qué hacer. Si comienza con Maven, entonces no tendrá que pensar en convertir su Proyecto Java en un Proyecto Maven más adelante, ¡simplemente comience con Maven desde el principio! El tutorial que más me gustó para esto fue de:

Tu primer guión de selenio

Las dos referencias del tutorial que mencioné hacen un buen trabajo al guiarlo a través de la creación de su primer script. El artículo de toolsqa asume menos conocimiento de codificación y el enlace softwaretestinghelp.com cubre más terreno, pero ambos son excelentes:

Una vez que tenga su primer script en funcionamiento, y esté al día con JUnit, la lección final del tutorial JUnit de toolsqa lo ayudará a refactorizar sus scripts iniciales al formato JUnit:

El modelo de objetos de página en Selenium

Una vez que se haya familiarizado con los conceptos básicos de Selenium y tenga un script que reproduzca uno o dos escenarios en su navegador, debería estar listo para pasar al siguiente nivel. El modelo de objetos de página es una forma de organizar su código de prueba de Selenium para hacerlo más fácil de mantener y reducir el código duplicado. Mis pruebas hasta este punto tenían todo el código de prueba contenido dentro de mi método de prueba. Así que pasé por un proceso de 2 pasos, primero refactorizando mi prueba existente a Page Object Model, y luego refactorizando en segundo lugar nuevamente para optimizarlo con el patrón Page Factory. Este fue un proceso instructivo de 2 pasos y solo puedo imaginar cuánto me arrepentiría si me saltara estas mejores prácticas y me volviera loco creando prueba tras prueba. Puede hacer esto automáticamente si está utilizando la grabadora inteligente en Parasoft Selénic. Aquí hay un par de guías que utilicé para educarme sobre el tema:

Si esto parece un trabajo adicional y un código adicional para el mismo resultado, estaría en lo cierto. Y si solo va a tener 1 o 2 pruebas, entonces tal vez esto sea excesivo, pero ese nunca es el caso de un ingeniero de automatización de pruebas. Este patrón termina teniendo todo el sentido del mundo cuando está construyendo un conjunto de pruebas de regresión robusto de cientos o miles de pruebas. La reutilización del código le permitirá ahorrar una cantidad increíble de tiempo a largo plazo.

Ubicación del elemento

A medida que comience a experimentar con sus scripts de Selenium, comenzará a apreciar por qué enumeré la ubicación de elementos en una página como una habilidad necesaria. Te encontrarás en la extensión de herramientas de desarrollo del navegador. MUCHOy comenzará a experimentar con XPath. Si bien hay muchas formas de ubicar elementos en una página con Selenium, XPath es una de las más flexibles y poderosas. Si no puede identificar de manera única un elemento con estrategias simples como usar una identificación, nombre o enlace, entonces está buscando en los localizadores XPath o CSS. Cualquier prueba de Selenium razonablemente compleja necesitará un poco de XPath aquí o allá para ubicar elementos de página rebeldes y cuanto mejor obtengas con XPath, más eficaz serás un probador.

Muy bien Wilhelm, XPath es genial, ¿puedes darme algo más que tarea aquí? ¡Actualmente, si! También hay una ingeniosa extensión de Chrome (también está disponible para Firefox) llamada TruePath. Este complemento hace un trabajo decente al generar listas de XPaths recomendados para elegir que puede copiar / pegar en su código localizador de Selenium. No siempre es perfecto, pero me resultó útil presentar un XPath relativo que me gustó de inmediato o presentar un XPath relativo que se acercara lo suficiente a algo que me gustaba y luego pude usarlo como punto de partida para modificarlo.

Espera inteligente en AJAX que usa jQuery

Una vez que localizar elementos se convierta en algo natural, lo más probable es que se encuentre con otro problema común. La aplicación web que estás probando tiene AJAX (Asincrónico Jabecedario And XML) que el navegador está haciendo al servidor y su secuencia de comandos de Selenium está ejecutando las acciones, lo que no le da al navegador suficiente tiempo para terminar de procesar este tráfico asincrónico. El sitio web de comercio electrónico que estaba probando tenía este problema en el que mi prueba de selenio hacía clic en "Agregar al carrito" y luego en "Ver carrito" tan rápido que cuando llegaba a la página del carrito, ¡el carrito estaba vacío! Necesitaba decirle a mi prueba de selenio que esperara una cantidad de tiempo adecuada antes de hacer clic en "Ver carrito", pero ¿cómo hacerlo?

Hay algunas lecciones básicas de Selenium asociadas con las condiciones de espera que cubren los tutoriales, pero ninguna de ellas parecía apropiada para algo asincrónico y dinámico como este. ¿Cómo puedo predecir cuánto tardará el servidor web en responder? ¿Sobreestimo para estar seguro y hacer que mi prueba sea más lenta de lo necesario? ¿Existe una forma mejor? Resulta que lo hay. Hoy en día, muchos marcos web modernos utilizan la biblioteca jQuery para respaldar las llamadas AJAX que realizan al servidor backend. Selenium WebDriver me permite ejecutar JavaScript como un paso de prueba, y puedo ejecutar algo de JavaScript que verifica el estado de jQuery para obtener una pista de cuándo el navegador termina de hablar con el servidor web y está bien continuar. Enterrado profundamente en el sitio web de toolsqa, curiosamente NO es parte del Tutorial de Selenium, encontré esto:

Para los principiantes, esta información adicional es excelente, pero si desea algo más específico, aquí hay un artículo conciso sobre el mismo tema:

Cambio de gerencia

El último tema que les dejo es uno que afecta a todos los probadores de Selenium, que es la gestión del cambio. Uno de los inconvenientes de la automatización de pruebas web es la frecuencia con la que cambia la interfaz de usuario y cómo eso puede afectar la estabilidad de sus pruebas automatizadas. Como ingeniero de automatización de pruebas, pronto se acostumbrará incómodamente al proceso de resolución de problemas de por qué una prueba no se ejecutó en su totalidad y si eso fue:

  • Un problema con tu prueba
  • Un problema con el medio ambiente
  • Un cambio inocuo en la aplicación (es decir, no es un error)
  • Un cambio inesperado en la aplicación (¡es decir, un error real!)

Espere muchas falsas alarmas con sus pruebas automatizadas fallando no porque encontraron un error, sino porque necesitan mantenimiento o porque el entorno tuvo un problema.

Una de las estrategias para ayudar a minimizar este problema generalizado que ya he mencionado es la de Ubicación de elementos. A menudo, cuando una prueba no logra ubicar un Elemento, es porque está utilizando una estrategia de ubicación que ya no es válida en la implementación más reciente de la aplicación. La forma en que está ubicando un elemento puede ser importante aquí, así que analicemos un ejemplo de cómo escribir un localizador que sea resistente al cambio:

Si piensa en un XPath absoluto para un elemento como este:

/ html / body / div [25] / div [2] / div / span / section [2] / div / h2 / p

Vaya, cualquier pequeño cambio en el HTML va a romper esa cosa. Si construye un XPath relativo como este:

//p[@id='8232:0′][contains(.,'Guidance for Success ')]

Entonces su prueba tiene más posibilidades de éxito. Tenga en cuenta las palabras "mejor oportunidad". A veces, la aplicación cambia tanto que simplemente no tienes suerte. Pero redactar pruebas más resistentes reducirá las posibilidades de que usted pueda trabajar en el futuro. (O puede consultar Parasoft Selénic.)

Este mismo problema también está presente con la espera. Muchos factores pueden causar inestabilidad en la automatización de su prueba debido a las condiciones de espera. El uso de estrategias como Smart Waiting en AJAX El uso de jQuery lo ayudará a reducir la probabilidad de tener que abordar un problema con su prueba debido a las condiciones de espera. Mientras hablamos del tema, aquí hay un tutorial útil sobre esperas en Selenium:

Sin embargo, al igual que con la ubicación del elemento, a veces va a ser SOL y el mantenimiento es inevitable.

Resumen

La experiencia de aprender Selenium me ha dado una apreciación de los desafíos que puede esperar enfrentar en su viaje para convertirse en un ingeniero de automatización de pruebas. Si eres nuevo y te sientes intimidado, recuerda que esto es más fácil de lo que piensas y serás un tester web automatizado experto en poco tiempo.

¿Quiere ver cómo su equipo puede crear pruebas confiables de interfaz de usuario web de Selenium con automatización + IA?
Foto de cabeza de Wilhelm Haaker, arquitecto sénior de soluciones, Parasoft Corporation

Por Wilhelm Haaker

Wilhelm Haaker es arquitecto senior de soluciones en Parasoft Corporation con experiencia en todo el conjunto de productos de Parasoft. Wilhelm se especializa en estrategias de automatización de pruebas para sistemas abiertos, aplicaciones web y microservicios y SOA para desarrolladores a través de ingenieros de pruebas funcionales y de rendimiento.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.