paint-brush
Cómo leer correos electrónicos de Gmail con Playwrightby@bormando
3,047
3,047

Cómo leer correos electrónicos de Gmail con Playwright

Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

Leer correos electrónicos en pruebas automatizadas es un truco que quizás necesites saber hacer en muchos proyectos. Es algo complicado de hacer, pero no imposible. La documentación y sus bibliotecas no son realmente tan fáciles de usar (especialmente, para aquellos que no trabajan mucho con pruebas de correo electrónico). El paquete gmail-getter npm lo ayuda a generar un token de acceso a la API REST de Gmail, obtener sus correos electrónicos y representarlos en el navegador.
featured image - Cómo leer correos electrónicos de Gmail con Playwright
Dmitrii Bormotov HackerNoon profile picture

¡Hola a todos!


Leer correos electrónicos en pruebas automatizadas es un truco que quizás necesites saber hacer en muchos proyectos. He aquí por qué y cómo afrontarlo...

¿Porque es esto importante?

Bueno, si el sistema envía correos electrónicos, es posible que desee verificar que se estén enviando y que el contenido sea correcto, incluidos los enlaces en los que se puede hacer clic.


Estos son los escenarios habituales cuando necesitas esto:

  1. Inscribirse.

    Muchas plataformas envían un correo electrónico de confirmación una vez que crea una cuenta y debe hacer clic en un enlace de confirmación del correo electrónico.


  2. Facturas.

    Si su aplicación realiza algún pago, generalmente envía un cheque o una factura por correo electrónico, por lo que es posible que desee ver si su contenido también es correcto.


  3. Resultados.

    Como resultados de pruebas médicas. En mi experiencia, algunos hospitales envían un correo electrónico con los resultados de las pruebas una vez realizadas (o al menos un enlace a una página personal donde puede ver el informe).



Por supuesto, esta no es la lista completa; estos son solo los casos de uso que más he conocido en mi carrera.


Si no se verifican estos escenarios, los usuarios podrían no recibir correos electrónicos o recibir información incorrecta en los correos electrónicos. En uno de los proyectos, nos ayudó a encontrar temprano un token de SendGrind vencido.

¿Cuáles son las complicaciones de leer correos electrónicos en los exámenes?

Leer correos electrónicos es algo complicado, pero no imposible.


Los primeros clientes de correo electrónico usaban POP3 para recuperar correos electrónicos del servidor, pero hay un pequeño problema: elimina los correos electrónicos del servidor una vez que se descargan.


Más tarde, apareció el protocolo IMAP , que le permite simplemente leer los correos electrónicos del servidor.


El problema es - algunos servicios prohíben estos protocolos o hacerte confirmar tu identidad cuando se conecta por primera vez (como cuando reinicia una prueba automatizada).


Por otro lado, algunos servicios como Gmail proporcionan una API REST para manipular sus correos electrónicos, pero hay otro problema: la documentación y sus bibliotecas no son tan fáciles de usar (especialmente para aquellos que no trabajan mucho con pruebas de correo electrónico).


Aquí es donde entra en juego gmail-getter : una biblioteca npm que le permite leer correos electrónicos e incluso abrirlos en su navegador si usa herramientas de automatización del navegador como Playwright .

Leer correos electrónicos de Gmail con Gmail-Getter

Lo primero es lo primero: debe instalar el paquete en su proyecto:

 npm install gmail-getter

Cree un proyecto de Google Cloud Console y obtenga credenciales

Para iniciar sesión en la API de Gmail, necesita obtener credenciales: un ID de cliente , un Secreto de cliente y un token de actualización . Estas credenciales le permiten obtener un token de acceso, que se requiere en solicitudes posteriores (como obtener una lista de correos electrónicos o un solo correo electrónico, etc.).


Pasos a seguir:

  1. Crea un proyecto en Google Cloud Console .


  2. Cree credenciales de OAuth en la sección API y servicios ( preferiblemente, seleccione la aplicación de escritorio allí si la necesita para pruebas automatizadas ) y descárguela.


  3. Habilite la API de Gmail .


  4. Obtenga un token de actualización.


Para obtener un token de actualización, simplemente ejecute un comando en la raíz del proyecto:

 npx gmail-getter get-refresh-token


(o en cualquier otro lugar si tienes el paquete instalado globalmente)

 get-refresh-token


Debes colocar el archivo credentials.json en un lugar donde ejecutarás el comando.


⚠️ el nombre del archivo de credenciales distingue entre mayúsculas y minúsculas ⚠️

Obtener token de acceso

Una vez realizada la configuración, deberás obtener un token de acceso en tus pruebas automatizadas. Yo diría que el mejor lugar para ello es una configuración global (una función que se ejecuta antes de que comience la ejecución de prueba).


Entonces, será algo como esto:


 import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) }


El ejemplo anterior utiliza variables de entorno, para las cuales definitivamente necesitarás instalar también el paquete dotenv .


Pero, si desea mantener las cosas simples, puede usar este fragmento donde necesite que se pueda acceder al token desde:


 const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )

Obtener correos electrónicos

En este momento, la API REST de Gmail utiliza su propio lenguaje de consulta para encontrar el correo electrónico que necesita:


 const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')


El comando anterior le devuelve un objeto de correo electrónico, pero aún necesita obtener su contenido o un enlace. Reemplazar from:squier7 subject:Test! a su propia consulta siguiendo la sintaxis del enlace de arriba ☝️


Puedes analizar un enlace usando una expresión regular :


 const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)


Reemplace /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im con su propia expresión regular ☝️


O obtenga todo el contenido HTML del correo electrónico y preséntelo en su navegador:


 import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser })

En general

¡Creo que ahora es bastante obvio que trabajar con correos electrónicos en pruebas automatizadas puede ser complicado! Pero conocer estos trucos hace las cosas mucho más fáciles.


Es posible que aún utilices otros servicios de correo electrónico o pruebes IMAP , pero te lo garantizo: no será tan fácil como en esta guía, ya que necesitarás crear tu propio asistente, como el que proporciona Gmail-getter. aquí.


Puedes encontrar el ejemplo de Playwright en GitHub . Ejemplo de ciprés también.