paint-brush
Comment lire les e-mails Gmail avec Playwrightby@bormando
3,054
3,054

Comment lire les e-mails Gmail avec Playwright

Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

Lire des e-mails dans des tests automatisés est une astuce que vous devrez peut-être savoir mettre en œuvre dans de nombreux projets. C'est une chose délicate à faire, mais pas impossible. La documentation et ses bibliothèques ne sont pas vraiment conviviales (surtout pour ceux qui ne travaillent pas beaucoup avec les tests de courrier électronique). Le package gmail-getter npm vous aide à générer un jeton d'accès à l'API Gmail REST, à récupérer vos e-mails et à les afficher dans le navigateur.
featured image - Comment lire les e-mails Gmail avec Playwright
Dmitrii Bormotov HackerNoon profile picture

Bonjour à tous!


Lire des e-mails dans des tests automatisés est une astuce que vous devrez peut-être savoir mettre en œuvre dans de nombreux projets. Voici pourquoi et comment y faire face…

Pourquoi est-ce important?

Eh bien, si le système envoie des e-mails, vous souhaiterez peut-être vérifier qu'ils sont envoyés et que le contenu est correct, y compris les liens cliquables.


Voici donc les scénarios habituels lorsque vous en avez besoin :

  1. S'inscrire.

    De nombreuses plateformes envoient un e-mail de confirmation une fois que vous créez un compte, et vous devez cliquer sur un lien de confirmation dans l'e-mail.


  2. Factures.

    Si votre application effectue des paiements, elle envoie généralement un chèque ou une facture par e-mail, vous souhaiterez peut-être également voir si son contenu est correct.


  3. Résultats.

    Comme les résultats des tests médicaux. D'après mon expérience, certains hôpitaux envoient un e-mail avec les résultats des tests une fois qu'ils sont terminés (ou au moins un lien vers une page personnelle où vous pouvez consulter le rapport).



Bien sûr, cette liste n’est pas complète : ce ne sont que les cas d’utilisation que j’ai le plus rencontrés au cours de ma carrière.


Si ces scénarios ne sont pas vérifiés, les utilisateurs risquent de ne pas recevoir d'e-mails ou d'obtenir des informations erronées dans les e-mails. Dans l'un des projets, cela nous a aidé à trouver rapidement un jeton SendGrind expiré.

Quelles sont les complications liées à la lecture des e-mails lors des tests ?

Lire des e-mails est une chose délicate à faire, mais pas impossible.


Les premiers clients de messagerie utilisaient POP3 pour récupérer les e-mails du serveur, mais il y a un petit problème : il supprime les e-mails du serveur une fois qu'ils sont téléchargés.


Plus tard, le protocole IMAP est arrivé : il vous permet de simplement lire les e-mails du serveur.


Le problème est - certains services interdisent ces protocoles ou vous faire confirmer votre identité lorsque vous vous connectez pour la première fois (comme lorsque vous redémarrez un test automatisé).


D'un autre côté, certains services comme Gmail fournissent une API REST pour manipuler vos e-mails, mais il y a un autre problème : la documentation et ses bibliothèques ne sont pas vraiment conviviales (surtout pour ceux qui ne travaillent pas beaucoup avec les tests de messagerie).


C'est là qu'intervient gmail-getter - une bibliothèque npm qui vous permet de lire des e-mails et même de les ouvrir dans votre navigateur si vous utilisez des outils d'automatisation de navigateur comme Playwright .

Lire les e-mails Gmail avec Gmail-Getter

Tout d'abord, vous devez installer le package dans votre projet :

 npm install gmail-getter

Créez un projet Google Cloud Console et obtenez les informations d'identification

Pour vous connecter à l'API Gmail, vous devez obtenir des informations d'identification : un ID client , un secret client et un jeton d'actualisation . Ces informations d'identification vous permettent d'obtenir un jeton d'accès, qui est requis pour d'autres demandes (comme obtenir une liste d'e-mails ou un seul e-mail, etc.).


Étapes à suivre :

  1. Créez un projet dans Google Cloud Console .


  2. Créez des informations d'identification OAuth dans la section API et services ( de préférence, sélectionnez Application de bureau si vous en avez besoin pour des tests automatisés ) et téléchargez-la.


  3. Activez l' API Gmail .


  4. Obtenez un jeton Actualiser.


Pour obtenir un jeton d'actualisation, exécutez simplement une commande dans la racine d'un projet :

 npx gmail-getter get-refresh-token


(ou n'importe où ailleurs si le package est installé globalement)

 get-refresh-token


Vous devez placer le fichier credentials.json à un endroit où vous exécuterez la commande.


⚠️ Le nom du fichier d'informations d'identification est sensible à la casse ⚠️

Obtenir un jeton d'accès

Une fois la configuration effectuée, vous devez récupérer un jeton d'accès dans vos tests automatisés. Je dirais que le meilleur endroit pour cela est une configuration globale (une fonction qui s'exécute avant le début du test).


Donc, ça ressemblera à ceci :


 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! ) }


L'exemple ci-dessus utilise des variables d'environnement, pour lesquelles vous devrez certainement également installer le package dotenv .


Mais si vous voulez garder les choses simples, vous pouvez utiliser cet extrait partout où vous avez besoin que le jeton soit accessible :


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

Recevoir des e-mails

À l'heure actuelle, l'API REST de Gmail utilise son propre langage de requête pour trouver l'e-mail dont vous avez besoin :


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


La commande ci-dessus vous renvoie un objet email, mais vous devez toujours obtenir son contenu ou un lien. Remplacer from:squier7 subject:Test! à votre propre requête en suivant la syntaxe du lien ci-dessus ☝️


Vous pouvez analyser un lien à l'aide d'une regex :


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


Remplacez /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im par votre propre expression régulière ☝️


OU récupérez l'intégralité du contenu HTML de l'e-mail et affichez-le dans votre navigateur :


 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 })

Dans l'ensemble

Je pense qu'il est maintenant assez évident que travailler avec des e-mails dans des tests automatisés peut être délicat ! Mais connaître ces astuces rend les choses beaucoup plus faciles.


Vous pouvez toujours utiliser d'autres services de messagerie ou essayer IMAP , mais je vous garantis que ce ne sera pas aussi simple que dans ce guide, car vous devrez créer votre propre assistant, comme gmail-getter fourni. ici.


Vous pouvez trouver l' exemple Playwright sur GitHub . Exemple de cyprès aussi.