En el mundo del de­sa­rro­llo web actual, es crucial adaptar las apli­ca­cio­nes a los di­fe­re­n­tes tamaños de las pantallas de los usuarios. El diseño web re­s­po­n­si­vo, del inglés re­s­po­n­si­ve design, con el que el proyecto publicado se adapta au­to­má­ti­ca­me­n­te a los re­qui­si­tos técnicos de cualquier di­s­po­si­ti­vo, se ha impuesto in­di­s­cu­ti­ble­me­n­te como solución estándar. Sin embargo, tan im­po­r­ta­n­te es para una apli­ca­ción o página web la fle­xi­bi­li­dad a la hora de ajustarse a cada pantalla como su co­m­pa­ti­bi­li­dad con los na­ve­ga­do­res. Para los usuarios, la ex­pe­rie­n­cia 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, ese­n­cia­les en la pro­gra­ma­ción de proyectos web desde hace unos años. Una de las he­rra­mie­n­tas más populares para rea­li­zar­las es el marco de trabajo Selenium, publicado por Thou­gh­t­Wo­r­ks, que veremos con más detalle en este tutorial.

¿Qué es Selenium o Selenium WebDriver?

Con el fin de ahorrar tiempo y costes al de­sa­rro­llar apli­ca­cio­nes en Python, Jason Huggins creó en 2004 el Ja­va­S­cri­p­t­Te­s­tRu­n­ner, el núcleo del marco de trabajo de pruebas de web que ahora se conoce como Selenium. Al principio, la he­rra­mie­n­ta se utilizaba solo de forma interna en la empresa de software Thou­gh­t­Wo­r­ks, donde Huggins trabajaba en ese momento. Cuando se cambió a Google en 2007, Huggins continuó de­sa­rro­lla­n­do y pe­r­fe­c­cio­na­n­do el programa, que pasó a ser de código abierto (licencia Apache 2.0) y, por lo tanto, se puso a di­s­po­si­ción del gran público. Después de fu­sio­nar­se 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 ex­clu­si­va­me­n­te en HTML y Ja­va­S­cri­pt y permite a los de­sa­rro­lla­do­res probar y registrar las in­ter­ac­cio­nes con una apli­ca­ción web y luego re­pe­ti­r­las las veces que se desee, de forma co­m­ple­ta­me­n­te au­to­má­ti­ca. Los co­m­po­ne­n­tes más im­po­r­ta­n­tes para realizar este proceso de pruebas son los si­guie­n­tes:

  • Selenium Core: el módulo del núcleo contiene la fu­n­cio­na­li­dad básica del marco de trabajo, in­clu­ye­n­do el Ja­va­S­cri­p­t­Te­s­tRu­n­ner y la API de comandos de prueba básicos.
  • Selenium IDE: Selenium IDE es el entorno de de­sa­rro­llo del marco de pruebas, sobre el que se basa la extensión IDE para Chrome y Firefox. Se utiliza para grabar y re­pro­du­cir pruebas.
  • Selenium WebDriver: WebDriver es la interfaz básica para simular las in­ter­ac­cio­nes 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 pre­de­ce­sor Selenium Remote Control (RC), que permite la ejecución de pruebas en paralelo en múltiples se­r­vi­do­res. De este modo, el tiempo de pruebas se reduce co­n­si­de­ra­ble­me­n­te.

¿Para qué se utiliza Selenium WebDriver?

Selenium es una he­rra­mie­n­ta 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 Pro­tra­c­tor, que fue de­sa­rro­lla­do es­pe­cia­l­me­n­te para las pruebas de apli­ca­cio­nes de Angular y Angular JS y que utiliza la API WebDriver para simular las in­ter­ac­cio­nes con el usuario. El software de au­to­ma­ti­za­ción de pruebas Appium, diseñado para apli­ca­cio­nes móviles nativas e híbridas, usa la interfaz es­ta­n­da­ri­za­da para realizar las pruebas de forma sencilla y cómoda en el lenguaje de pro­gra­ma­ción deseado.

El popular servicio web basado en la nube Bro­w­se­r­S­ta­ck también utiliza Selenium: este servicio, de­sa­rro­lla­do en la India, ofrece distintas su­s­cri­p­cio­nes de pago después de un período de prueba gratuito y emplea este marco para sus pruebas au­to­ma­ti­za­das de apli­ca­cio­nes móviles y de es­cri­to­rio.

Nota

Como software de código abierto, Selenium WebDrive se pueden utilizar con in­de­pe­n­de­n­cia de otros programas, como las so­lu­cio­nes me­n­cio­na­das. Los distintos co­m­po­ne­n­tes que se pueden combinar en el marco de trabajo permiten hacerlo sin problema, siempre que se disponga de los co­no­ci­mie­n­tos 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 fa­bri­ca­n­te de software, no necesitas co­no­ci­mie­n­tos de pro­gra­ma­ción es­pe­cí­fi­cos. Realizar las pruebas de na­ve­ga­ción con este marco de trabajo es fácil, porque se pueden escribir los scripts de prueba en varios lenguajes, in­clu­ye­n­do Ja­va­S­cri­pt, Java, C#, Ruby y Python. En el siguiente tutorial de Selenium, verás la co­n­fi­gu­ra­ción y el uso del marco de trabajo usando Python como ejemplo.

Nota

Los si­guie­n­tes pasos de este tutorial de Selenium WebDriver asumen que la versión de Python está ac­tua­li­za­da.

Paso 1: instalar Selenium

Hay varios clientes y bi­blio­te­cas di­s­po­ni­bles para usar Selenium WebDriver, de­no­mi­na­das en su conjunto language bindings o vínculos de lenguaje, que co­n­s­ti­tu­yen la base del marco y el pro­ce­di­mie­n­to de las pruebas. Sin embargo, solo tienes que instalar los co­n­tro­la­do­res y bi­blio­te­cas 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 an­te­rio­r­me­n­te, extraer el archivo tar.gz y utilizar el archivo setup.py para realizar la in­s­ta­la­ción. En este caso, debes usar este comando:

python setup.py install

El segundo paso es descargar e instalar el co­n­tro­la­dor del navegador al que se vaya a conectar Selenium. Por ejemplo, Firefox requiere el co­n­tro­la­dor ge­c­ko­dri­ver, cuya versión oficial se puede descargar en el siguiente re­po­si­to­rio de GitHub. Puedes consultar la lista completa de los co­n­tro­la­do­res para los na­ve­ga­do­res más im­po­r­ta­n­tes (Chrome, Edge, Internet Explorer, Safari etc.) en la do­cu­me­n­ta­ción oficial en línea de Selenium.

Nota

Si quieres utilizar Selenium por conexión a distancia, debes instalar también su co­m­po­ne­n­te de servidor. En­co­n­tra­rás el paquete de in­s­ta­la­ció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 apli­ca­ción del servidor requiere una versión ac­tua­li­za­da del entorno de ejecución de Java (JRE).

Paso 2: se­le­c­cio­nar el entorno de de­sa­rro­llo apropiado (IDE)

Si se cumple con los re­qui­si­tos 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 re­co­mie­n­da utilizar un IDE en Python (o un entorno de de­sa­rro­llo para el lenguaje con el que se desea trabajar) para maximizar la pro­du­c­ti­vi­dad. Entre las so­lu­cio­nes más conocidas y populares están las si­guie­n­tes:

  • PyCharm: puedes encontrar el IDE de Python PyCharm en una comunidad gratuita de código abierto o una comunidad pro­fe­sio­nal de pago si lo deseas. Ambas versiones permiten escribir código para las pruebas con Selenium. Los sistemas ope­ra­ti­vos co­m­pa­ti­bles son Windows, Linux y MacOS.
  • PyDev: PyDev es un plugin de Python para el entorno de de­sa­rro­llo Eclipse, diseñado es­pe­cí­fi­ca­me­n­te para de­sa­rro­llar apli­ca­cio­nes en Java. Puedes descargar esta extensión en la página del proyecto o di­re­c­ta­me­n­te a través del gestor de ac­tua­li­za­cio­nes. Tanto PyDev como Eclipse se pueden ejecutar en todos los sistemas ha­bi­tua­les 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 pe­r­so­na­li­za­dos para au­to­ma­ti­zar las in­ter­ac­cio­nes 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 au­to­má­ti­ca­me­n­te en Mozilla, introduce un término de búsqueda y luego evalúa o registra los re­su­l­ta­dos. Tra­n­s­mi­ti­dos en forma de código, estos pasos au­to­ma­ti­za­dos 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 si­g­ni­fi­ca­do de cada co­m­po­ne­n­te del script en la siguiente tabla:

Línea(s) de código Si­g­ni­fi­ca­do
from selenium import we­b­dri­ve­r­from selenium.webdriver.common.keys import Keys En primer lugar, se carga el módulo WebDriver para im­ple­me­n­tar las clases y métodos para el soporte de los di­fe­re­n­tes na­ve­ga­do­res. Después, el script carga la co­n­fi­gu­ra­ción del teclado virtual para simular las entradas de teclado más tarde.
driver = webdriver.Firefox()driver.im­pli­citly_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 in­ter­ac­cio­nes au­to­ma­ti­za­das 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á ide­n­ti­fi­ca­do con el atributo de ID "lst-ib". Una vez lo­ca­li­za­do, 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 co­n­ti­nua­ció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 re­su­l­ta­dos de la búsqueda se enumeran a co­n­ti­nua­ción como elementos <a>. En este punto, se introduce el método find_elements_by_class_name para poder controlar estos re­su­l­ta­dos.
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, li­mi­tá­n­do­se 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 ada­p­ta­ción de este marco de trabajo para las pruebas de na­ve­ga­do­res. No obstante, también muestra que Selenium WebDrive es igua­l­me­n­te in­te­re­sa­n­te 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 re­co­pi­la­ción de datos web, consulta nuestro artículo sobre el web scraping.

Selenium WebDriver: no apto para todos los es­ce­na­rios

Selenium WebDriver es una excelente he­rra­mie­n­ta para recopilar datos im­po­r­ta­n­tes de los sitios web y simular las in­ter­ac­cio­nes con el usuario. Sin embargo, este marco de código abierto no es apropiado para todos los ámbitos de apli­ca­ción, como indican los de­sa­rro­lla­do­res en su lista de “peores casos”. Algunos de los casos o co­n­te­ni­dos web que no se pueden probar o registrar con Selenium son los si­guie­n­tes:

  • Captchas: los famosos y muy di­fu­n­di­dos captchas fueron de­sa­rro­lla­dos es­pe­cia­l­me­n­te para proteger de los bots y el spam, por lo que no están di­s­po­ni­bles para procesos de au­to­ma­ti­za­ción con Selenium. Por eso, durante el scraping, se deben des­ac­ti­var las pruebas de entrada o su­s­ti­tui­r­las pro­vi­sio­na­l­me­n­te por un elemento al­te­r­na­ti­vo.
  • Descarga de archivos: aunque las in­s­ta­n­cias 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 de­s­ve­n­ta­jas usando un proxy adicional si es necesario.
  • Iniciar sesión en los servicios de terceros: tanto si se trata de una pla­ta­fo­r­ma de redes sociales, como un servicio en la nube o una cuenta de correo ele­c­tró­ni­co, no re­co­me­n­da­mos iniciar sesión en los servicios de terceros a través de una sesión de Selenium. Por una parte, los pro­vee­do­res de esos servicios pro­po­r­cio­nan sus propias API con fines de prueba, y, por la otra, las pruebas con el marco de trabajo en esos casos pueden ser muy la­bo­rio­sas.
  • Pruebas de re­n­di­mie­n­to: Selenium WebDriver no es adecuado para pruebas de re­n­di­mie­n­to per se, ya que el marco de trabajo no está diseñado para este propósito.
Ir al menú principal