Optimiza tu tiempo con Selenium y Node.js

Optimiza tu tiempo con Selenium y Node.js

En cualquier empleo, se pueden presentar tareas que, eventualmente, se vuelven algo repetitivas. Esto es especialmente común en el área de soporte de software, donde es común recibir una gran cantidad de solicitudes (tickets) que implican llevar a cabo la misma acción, pero para diferentes usuarios.

Un ejemplo que destaco es una ocasión en la que me asignaron la administración de una aplicación encargada de gestionar el acceso a los cursos de una importante compañía automotriz. En un solo día, me vi en la necesidad de atender alrededor de 50 tickets que, en esencia, requerían ejecutar una secuencia idéntica de pasos.

Básicamente el proceso era el siguiente:

  1. Entrar al sitio web, desde mi panel de administración.
  2. Hacer clic en el botón correspondiente para agregar o eliminar un usuario.
  3. Ingresar el ID del usuario proporcionado en el ticket.
  4. Realizar un segundo clic en el botón para ejecutar la acción de agregar o eliminar, según lo que se requiera.

Como pueden notar, se trata de un proceso bastante sencillo, pero puede volverse tedioso cuando se enfrenta a un gran volumen de solicitudes. Además, esta tarea consume tiempo que podría utilizarse en otras actividades. Dicho esto, necesitábamos encontrar una solución que permitiera completar las solicitudes de manera más eficiente.

La respuesta para dicha tarea es un software llamado Selenium, el cual es un conjunto de herramientas y bibliotecas utilizado principalmente para la automatización en aplicaciones web.

Selenium es ampliamente usado en la industria de desarrollo de software para automatizar pruebas funcionales y de regresión en aplicaciones web. También se emplea  en la extracción de datos web (web scraping) y para realizar tareas automatizadas en navegadores web. Es una herramienta versátil que es esencial para garantizar la calidad y la funcionalidad de aplicaciones web en un entorno de desarrollo ágil.

El uso de Selenium para la automatización de pruebas y otras tareas relacionadas con la interacción en navegadores web ofrece varias ventajas, incluyendo:

  • Compatibilidad con Múltiples Navegadores: Selenium es compatible con una variedad de navegadores web populares, como Chrome, Firefox, Safari, Edge e Internet Explorer. Esto permite probar la compatibilidad de una aplicación en diferentes navegadores.
  • Automatización de Pruebas: Selenium es ampliamente utilizado en la automatización de pruebas de aplicaciones web, lo que permite la ejecución de pruebas de forma repetible, consistente y eficiente. Esto es esencial para garantizar la calidad y la funcionalidad de las aplicaciones web.
  • Integración con Herramientas de Gestión de Pruebas: Selenium se puede integrar con herramientas de gestión de pruebas, como TestNG, JUnit y otras, para una administración eficiente de casos de prueba y generación de informes.
  • Automatización de Tareas Web: Además de pruebas, Selenium se utiliza para la automatización de tareas web, como web scraping, lo que es útil en aplicaciones que requieren la extracción de datos de sitios web.

La cuestión aquí es que esta aplicación que generamos con Selenium debe ser implementada en alguna plataforma que sea accesible por diversos usuarios. Dicho esto, el desarrollo cuenta principalmente con el framework de Node.js.

Con base en el ejemplo que les compartí sobre la plataforma de accesos a cursos, vamos a realizar un ejercicio para implementar Selenium en Node.js:

1) Abre una terminal o línea de comandos.

2) Ve al directorio de tu proyecto de Node.js o crea uno nuevo si aún no lo tienes.

3) Ejecuta el siguiente comando para instalar selenium-webdriver utilizando npm:

npm install selenium-webdriver

4) Junto con selenium-webdriver, es necesario instalar el controlador específico del navegador que desees usar. Por ejemplo, si deseas utilizar Chrome, puedes instalar el controlador de Chrome llamado chromedriver:

npm install chromedriver

Obviamente es necesario que tengas instalado el navegador que deseas automatizar, en este caso Chrome.

1) Ya con nuestro driver y Selenium instalado, vamos a realizar el paso 1 de nuestra repetitiva labor:

const { Builder, By, Key, until } = require('selenium-webdriver');

const chrome = require('selenium-webdriver/chrome');

(async function example() {

const options = new chrome.Options();

// Opciones adicionales del navegador, si es necesario

// options.addArguments('--headless'); // Para ejecutar en modo sin cabeza (sin interfaz gráfica)

const driver = new Builder()

.forBrowser('chrome')

.setChromeOptions(options)

.build();

try {

// Navega a la página de inicio de sesión

await driver.get('URL_DE_LA_PAGINA_DE_INICIO_DE_SESION');

// Encuentra el campo de correo electrónico y llena con un correo válido

const emailField = await driver.findElement(By.id('id_del_campo_de_correo'));

emailField.sendKeys('correo@example.com');

// Encuentra el campo de contraseña y llena con una contraseña válida

const passwordField = await driver.findElement(By.id('id_del_campo_de_contraseña'));

passwordField.sendKeys('tu_contraseña_secreta');

// Encuentra y hace clic en el botón de inicio de sesión

const loginButton = await driver.findElement(By.id('id_del_boton_de_inicio_de_sesion'));

loginButton.click();

// Espera a que la página se cargue completamente o realiza otras acciones en la página de destino

await driver.wait(until.titleIs('Título de la página de destino'), 10000);

// Aquí se termina solo el paso 1 de nuestro problema

2) Ahora vamos a realizar el paso dos, donde vamos a validar la acción a realizar, determinada por la solicitud del usuario:

// Navega a la página que contiene los botones para la acción (supongamos que la URL es "URL_DE_LA_PAGINA")

await driver.get('URL_DE_LA_PAGINA');

// Verifica el valor de la constante "acción" para determinar si se debe hacer clic en "Agregar" o "Eliminar"

const accion = 'eliminar'; //Este valor debe de ser asignado en base a labor de tickets que se va a realizar, valor que será determinado por el usuario.

if (accion === 'agregar') {

// Si la acción es "agregar", busca y haz clic en el botón de agregar

const botonAgregar = await driver.findElement(By.id('id_del_boton_agregar'));

botonAgregar.click();

} else if (accion === 'eliminar') {

// Si la acción es "eliminar", busca y haz clic en el botón de eliminar

const botonEliminar = await driver.findElement(By.id('id_del_boton_eliminar'));

botonEliminar.click();

} else {

// Manejar el caso en el que "acción" no sea ni "agregar" ni "eliminar"

console.error('Valor de acción no válido');

}

3) Ahora ya con la acción determinada, solo basta con ingresar el ID del usuario, buscarlo en nuestra lista y hacer clic en el botón ejecutar para terminar el ticket correspondiente:

// Encuentra el campo de entrada con el ID "ID_del_usuario" y establece un valor

const inputUsuario = await driver.findElement(By.id('ID_del_usuario'));

inputUsuario.sendKeys('valor_a_ingresar');

// Encuentra el botón de búsqueda y haz clic en él

const botonBuscar = await driver.findElement(By.id('ID_del_boton_buscar'));

botonBuscar.click();

// Espera a que la página cargue después de hacer clic en el botón de búsqueda

// ...

// Encuentra el menú desplegable con el ID "combobox_usuario" y selecciona un valor por su índice (0 para el primer elemento)

const comboboxUsuario = await driver.findElement(By.id('combobox_usuario'));

comboboxUsuario.selectByIndex(0);

// Encuentra el botón de acción y haz clic en él

const botonAccion = await driver.findElement(By.id('ID_del_boton_accion'));

botonAccion.click();

// Espera a que la página se cargue completamente o realiza otras acciones en la página de destino

// ...

} finally {

// Cierra el navegador al finalizar

await driver.quit();

}

})();

Recuerda que este es un ejemplo básico de cómo utilizar Selenium con Node.js. Por eso muchos de los valores y ID son genéricos, pero sin duda pueden apoyarte para tus implementaciones.

En resumen, Selenium y Node.js son una combinación poderosa para la automatización de pruebas y tareas en aplicaciones web.

Si eres nuevo en Selenium y Node.js, te animo a profundizar en su documentación oficial y a explorar proyectos y tutoriales en línea. La combinación de estas tecnologías ofrece un mundo de oportunidades para simplificar y mejorar tu flujo de trabajo en el desarrollo y prueba de aplicaciones web.

Espero que este artículo te haya sido útil y te haya proporcionado una base sólida para empezar a utilizar Selenium y Node.JS en tus proyectos. No dudes en explorar más a fondo para descubrir lo que puedes lograr con esta poderosa combinación.

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.