Tutorial de Selenium: cómo usar el marco de pruebas cruzadas para navegador

En el mundo del desarrollo web actual, es crucial adaptar las aplicaciones a los diferentes tamaños de las pantallas de los usuarios. El diseño web responsivo, del inglés responsive design, con el que el proyecto publicado se adapta automáticamente a los requisitos técnicos de cualquier dispositivo, se ha impuesto indiscutiblemente como solución estándar. Sin embargo, tan importante es para una aplicación o página web la flexibilidad a la hora de ajustarse a cada pantalla como su compatibilidad con los navegadores. Para los usuarios, la experiencia de acceder a la página debe ser idéntica con Firefox, Chrome, Safari o cualquier otro navegador.

Las llamadas pruebas cruzadas de navegador son, por esto, esenciales en la programación de proyectos web desde hace unos años. Una de las herramientas más populares para realizarlas es el marco de trabajo Selenium, publicado por ThoughtWorks, que veremos con más detalle en este tutorial.

¿Qué es Selenium o Selenium WebDriver?

Con el fin de ahorrar tiempo y costes al desarrollar aplicaciones en Python, Jason Huggins creó en 2004 el JavaScriptTestRunner, el núcleo del marco de trabajo de pruebas de web que ahora se conoce como Selenium. Al principio, la herramienta se utilizaba solo de forma interna en la empresa de software ThoughtWorks, donde Huggins trabajaba en ese momento. Cuando se cambió a Google en 2007, Huggins continuó desarrollando y perfeccionando el programa, que pasó a ser de código abierto (licencia Apache 2.0) y, por lo tanto, se puso a disposición del gran público. Después de fusionarse con la API WebDriver, el marco de pruebas recibió el nombre de Selenium o Selenium WebDriver, que sigue vigente hoy en día.

La versión actual de Selenium está basada exclusivamente en HTML y JavaScript y permite a los desarrolladores probar y registrar las interacciones con una aplicación web y luego repetirlas las veces que se desee, de forma completamente automática. Los componentes más importantes para realizar este proceso de pruebas son los siguientes:

  • Selenium Core: el módulo del núcleo contiene la funcionalidad básica del marco de trabajo, incluyendo el JavaScriptTestRunner y la API de comandos de prueba básicos.
  • Selenium IDE: Selenium IDE es el entorno de desarrollo del marco de pruebas, sobre el que se basa la extensión IDE para Chrome y Firefox. Se utiliza para grabar y reproducir pruebas.
  • Selenium WebDriver: WebDriver es la interfaz básica para simular las interacciones del usuario con cualquier navegador, ya sea Firefox, Chrome, Edge, Safari o Internet Explorer. Desde 2018, la API es un estándar W3C oficial.
  • Selenium Grid: Selenium Grid es una extensión de WebDriver y de su predecesor Selenium Remote Control (RC), que permite la ejecución de pruebas en paralelo en múltiples servidores. De este modo, el tiempo de pruebas se reduce considerablemente.

¿Para qué se utiliza Selenium WebDriver?

Selenium es una herramienta popular en entornos de pruebas y se utiliza sobre todo como base para una amplia gama de programas en este espectro. Entre los ejemplos más conocidos está el marco de trabajo de extremo a extremo Protractor, que fue desarrollado especialmente para las pruebas de aplicaciones de Angular y Angular JS y que utiliza la API WebDriver para simular las interacciones con el usuario. El software de automatización de pruebas Appium, diseñado para aplicaciones móviles nativas e híbridas, usa la interfaz estandarizada para realizar las pruebas de forma sencilla y cómoda en el lenguaje de programación deseado.

El popular servicio web basado en la nube BrowserStack también utiliza Selenium: este servicio, desarrollado en la India, ofrece distintas suscripciones de pago después de un período de prueba gratuito y emplea este marco para sus pruebas automatizadas de aplicaciones móviles y de escritorio.

Nota

Como software de código abierto, Selenium WebDrive se pueden utilizar con independencia de otros programas, como las soluciones mencionadas. Los distintos componentes que se pueden combinar en el marco de trabajo permiten hacerlo sin problema, siempre que se disponga de los conocimientos técnicos adecuados.

Cómo usar Selenium: tutorial con ejemplo de código

Si quieres crear tus propios casos de prueba con Selenium, sin depender de un servicio externo o de un fabricante de software, no necesitas conocimientos de programación específicos. Realizar las pruebas de navegación con este marco de trabajo es fácil, porque se pueden escribir los scripts de prueba en varios lenguajes, incluyendo JavaScript, Java, C#, Ruby y Python. En el siguiente tutorial de Selenium, verás la configuración y el uso del marco de trabajo usando Python como ejemplo.

Nota

Los siguientes pasos de este tutorial de Selenium WebDriver asumen que la versión de Python está actualizada.

Paso 1: instalar Selenium

Hay varios clientes y bibliotecas disponibles para usar Selenium WebDriver, denominadas en su conjunto language bindings o vínculos de lenguaje, que constituyen la base del marco y el procedimiento de las pruebas. Sin embargo, solo tienes que instalar los controladores y bibliotecas del cliente para el idioma en el que quieras escribir los scripts.

Este tutorial de Selenium WebDriver requiere language bindings para Python, que se pueden instalar de manera estándar con el gestor de paquetes Python pip y el siguiente comando.

pip install selenium

También puedes bajarte el paquete fuente del enlace indicado anteriormente, extraer el archivo tar.gz y utilizar el archivo setup.py para realizar la instalación. En este caso, debes usar este comando:

python setup.py install

El segundo paso es descargar e instalar el controlador del navegador al que se vaya a conectar Selenium. Por ejemplo, Firefox requiere el controlador geckodriver, cuya versión oficial se puede descargar en el siguiente repositorio de GitHub. Puedes consultar la lista completa de los controladores para los navegadores más importantes (Chrome, Edge, Internet Explorer, Safari etc.) en la documentación oficial en línea de Selenium.

Nota

Si quieres utilizar Selenium por conexión a distancia, debes instalar también su componente de servidor. Encontrarás el paquete de instalación en la página oficial de descargas del marco de trabajo, en la sección Selenium Server (Grid). Recuerda que la ejecución de la aplicación del servidor requiere una versión actualizada del entorno de ejecución de Java (JRE).

Paso 2: seleccionar el entorno de desarrollo apropiado (IDE)

Si se cumple con los requisitos previos para utilizar Selenium WebDriver, puedes comenzar a escribir scripts de prueba para tu proyecto web. Por lo general, para este fin basta con el popular editor de código, pero se recomienda utilizar un IDE en Python (o un entorno de desarrollo para el lenguaje con el que se desea trabajar) para maximizar la productividad. Entre las soluciones más conocidas y populares están las siguientes:

  • PyCharm: puedes encontrar el IDE de Python PyCharm en una comunidad gratuita de código abierto o una comunidad profesional de pago si lo deseas. Ambas versiones permiten escribir código para las pruebas con Selenium. Los sistemas operativos compatibles son Windows, Linux y MacOS.
  • PyDev: PyDev es un plugin de Python para el entorno de desarrollo Eclipse, diseñado específicamente para desarrollar aplicaciones en Java. Puedes descargar esta extensión en la página del proyecto o directamente a través del gestor de actualizaciones. Tanto PyDev como Eclipse se pueden ejecutar en todos los sistemas habituales Windows, MacOS y Linux.

Paso 3: crear un script en Python para probar el navegador (Firefox) con Selenium

Una vez tengas la solución que desees, puedes empezar a escribir scripts personalizados para automatizar las interacciones con el navegador mediante clases y funciones de Selenium. En este tutorial de Selenium, crearemos como ejemplo un script de Python para Firefox, que llama al motor de búsqueda Google automáticamente en Mozilla, introduce un término de búsqueda y luego evalúa o registra los resultados. Transmitidos en forma de código, estos pasos automatizados tienen el siguiente aspecto:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Crear una sesión de Firefox
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
# Acceder a la aplicación web
driver.get("http://www.google.es")
# Localizar cuadro de texto
search_field = driver.find_element_by_id("lst-ib")
search_field.clear()
# Indicar y confirmar término de búsqueda
search_field.send_keys("Término de búsqueda")
search_field.submit()
# Obtener la lista de resultados de la búsqueda y mostrarla
# mediante el método find_elements_by_class_name
lists= driver.find_elements_by_class_name("_Rm")
# Pasar por todos los elementos y reproducir el texto individual
i=0
for listitem in lists:
    print (listitem.get_attribute("innerHTML"))
    i=i+1
    if(i>10):
        break
# Cerrar la ventana del navegador
driver.quit()

Puedes consultar el significado de cada componente del script en la siguiente tabla:

Línea(s) de código Significado
from selenium import webdriverfrom selenium.webdriver.common.keys import Keys En primer lugar, se carga el módulo WebDriver para implementar las clases y métodos para el soporte de los diferentes navegadores. Después, el script carga la configuración del teclado virtual para simular las entradas de teclado más tarde.
driver = webdriver.Firefox()driver.implicitly_wait(30)driver.maximize_window() El segundo paso es crear una instancia de Firefox que luego se puede controlar con comandos de Selenium. Hay previsto un tiempo de espera de 30 segundos para que arranque el navegador, y también se debe maximizar la ventana del navegador.
driver.get("http://www.google.es") El script llamará a la página española de Google, que sirve aquí como base para las interacciones automatizadas de los usuarios.
search_field = driver.find_element_by_id("lst-ib")search_field.clear() Después de llamar al motor de búsqueda, el script busca el cuadro de texto de la búsqueda de Google, que está identificado con el atributo de ID "lst-ib". Una vez localizado, el cuadro de búsqueda se borra con el método clear().
search_field.send_keys("Término de búsqueda")search_field.submit() A continuación, se introduce el texto del término de búsqueda con el método submit().
lists= driver.find_elements_by_class_name("_Rm") Los resultados de la búsqueda se enumeran a continuación como elementos <a>. En este punto, se introduce el método find_elements_by_class_name para poder controlar estos resultados.
i=0for listitem in lists: print (listitem.get_attribute("innerHTML")) i=i+1 if(i>10): break En el último paso activo, el script muestra la lista de aciertos, limitándose a las primeras diez entradas con la etiqueta <a>.
driver.quit() La línea final del código indica a la instancia del navegador que debe cerrarse.
Nota

El caso utilizado en este tutorial de Selenium es un excelente ejemplo de la capacidad de adaptación de este marco de trabajo para las pruebas de navegadores. No obstante, también muestra que Selenium WebDrive es igualmente interesante para realizar web scraping con Python, uno de los muchos otros usos de este software de pruebas. Para saber más sobre el tema de la recopilación de datos web, consulta nuestro artículo sobre el web scraping.

Selenium WebDriver: no apto para todos los escenarios

Selenium WebDriver es una excelente herramienta para recopilar datos importantes de los sitios web y simular las interacciones con el usuario. Sin embargo, este marco de código abierto no es apropiado para todos los ámbitos de aplicación, como indican los desarrolladores en su lista de “peores casos”. Algunos de los casos o contenidos web que no se pueden probar o registrar con Selenium son los siguientes:

  • Captchas: los famosos y muy difundidos captchas fueron desarrollados especialmente para proteger de los bots y el spam, por lo que no están disponibles para procesos de automatización con Selenium. Por eso, durante el scraping, se deben desactivar las pruebas de entrada o sustituirlas provisionalmente por un elemento alternativo.
  • Descarga de archivos: aunque las instancias de Selenium permiten iniciar la descarga de archivos, la API no muestra el progreso de descarga.
  • Códigos de respuesta HTTP: Selenium tiene problemas para tratar con códigos de estado HTTP. Sin embargo, se pueden compensar estas desventajas usando un proxy adicional si es necesario.
  • Iniciar sesión en los servicios de terceros: tanto si se trata de una plataforma de redes sociales, como un servicio en la nube o una cuenta de correo electrónico, no recomendamos iniciar sesión en los servicios de terceros a través de una sesión de Selenium. Por una parte, los proveedores de esos servicios proporcionan sus propias API con fines de prueba, y, por la otra, las pruebas con el marco de trabajo en esos casos pueden ser muy laboriosas.
  • Pruebas de rendimiento: Selenium WebDriver no es adecuado para pruebas de rendimiento per se, ya que el marco de trabajo no está diseñado para este propósito.
¿Le ha resultado útil este artículo?
Page top