paint-brush
So lesen Sie Gmail-E-Mails mit Playwrightby@bormando
3,047
3,047

So lesen Sie Gmail-E-Mails mit Playwright

Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

Das Lesen von E-Mails in automatisierten Tests ist ein Trick, den Sie in vielen Projekten beherrschen müssen. Es ist eine schwierige Sache, aber nicht die unmögliche. Die Dokumentation und ihre Bibliotheken sind nicht wirklich benutzerfreundlich (insbesondere für diejenigen, die nicht viel mit E-Mail-Tests arbeiten). Mit dem NPM-Paket „gmail-getter“ können Sie ein Gmail-REST-API-Zugriffstoken generieren, Ihre E-Mails abrufen und im Browser rendern.
featured image - So lesen Sie Gmail-E-Mails mit Playwright
Dmitrii Bormotov HackerNoon profile picture

Hallo zusammen!


Das Lesen von E-Mails in automatisierten Tests ist ein Trick, den Sie in vielen Projekten beherrschen müssen. Hier erfahren Sie, warum und wie Sie damit umgehen können …

Warum ist das wichtig?

Wenn das System E-Mails sendet, möchten Sie möglicherweise überprüfen, ob diese gesendet werden und ob der Inhalt korrekt ist, einschließlich anklickbarer Links.


Dies sind also die üblichen Szenarios, wenn Sie Folgendes benötigen:

  1. Melden Sie sich an.

    Viele Plattformen senden eine Bestätigungs-E-Mail, sobald Sie ein Konto erstellt haben, und Sie müssen in der E-Mail auf einen Bestätigungslink klicken.


  2. Rechnungen.

    Wenn Ihre App Zahlungen ausführt, sendet sie normalerweise einen Scheck oder eine Rechnung per E-Mail. Daher möchten Sie möglicherweise auch prüfen, ob deren Inhalt korrekt ist.


  3. Ergebnisse.

    Wie medizinische Testergebnisse. Meiner Erfahrung nach senden einige Krankenhäuser eine E-Mail mit den Testergebnissen, sobald sie fertig sind (oder zumindest einen Link zu einer persönlichen Seite, auf der Sie den Bericht einsehen können).



Natürlich ist dies nicht die vollständige Liste – das sind nur die Anwendungsfälle, die mir in meiner Karriere am häufigsten begegnet sind.


Wenn diese Szenarien nicht überprüft werden, kann dies dazu führen, dass Benutzer keine E-Mails erhalten oder falsche Informationen in E-Mails erhalten. In einem der Projekte hat es uns geholfen, einen abgelaufenen SendGrind- Token frühzeitig zu finden.

Was sind die Komplikationen beim Lesen von E-Mails in Tests?

Das Lesen von E-Mails ist eine schwierige, aber keine unmögliche Sache.


Frühe E-Mail-Clients verwendeten POP3, um E-Mails vom Server abzurufen, es gibt jedoch ein kleines Problem: Die E-Mails werden nach dem Herunterladen vom Server gelöscht.


Später kam das IMAP- Protokoll hinzu – es ermöglicht das einfache Lesen von E-Mails vom Server.


Das Problem ist - Einige Dienste verbieten diese Protokolle oder Lassen Sie Ihre Identität bestätigen wenn Sie zum ersten Mal eine Verbindung herstellen (z. B. wenn Sie einen automatisierten Test neu starten).


Andererseits bieten einige Dienste wie Gmail eine REST-API zum Bearbeiten Ihrer E-Mails, aber es gibt noch ein weiteres Problem: Die Dokumentation und ihre Bibliotheken sind nicht wirklich benutzerfreundlich (insbesondere für diejenigen, die nicht viel mit E-Mail-Tests arbeiten).


Hier kommt gmail-getter ins Spiel – eine NPM- Bibliothek, die es Ihnen ermöglicht, E-Mails zu lesen und sie sogar in Ihrem Browser zu öffnen, wenn Sie Browser-Automatisierungstools wie Playwright verwenden.

Lesen von Gmail-E-Mails mit Gmail-Getter

Das Wichtigste zuerst: Sie müssen das Paket in Ihrem Projekt installieren:

 npm install gmail-getter

Erstellen Sie ein Google Cloud Console-Projekt und erhalten Sie Anmeldeinformationen

Um sich bei der Gmail-API anzumelden, müssen Sie Anmeldeinformationen erhalten: eine Client-ID , ein Client-Geheimnis und ein Aktualisierungstoken . Mit diesen Anmeldeinformationen können Sie ein Zugriffstoken erhalten, das für weitere Anfragen erforderlich ist (z. B. das Abrufen einer Liste von E-Mails oder einer einzelnen E-Mail usw.).


Weitere Schritte:

  1. Erstellen Sie ein Projekt in der Google Cloud Console .


  2. Erstellen Sie OAuth-Anmeldeinformationen im Abschnitt „API & Dienste“ ( wählen Sie dort vorzugsweise die Desktop- App aus, wenn Sie sie für automatisierte Tests benötigen ) und laden Sie sie herunter.


  3. Aktivieren Sie die Gmail-API .


  4. Besorgen Sie sich ein Aktualisierungstoken.


Um ein Aktualisierungstoken zu erhalten, führen Sie einfach einen Befehl in einem Projektstammverzeichnis aus:

 npx gmail-getter get-refresh-token


(oder irgendwo anders, wenn Sie das Paket global installiert haben)

 get-refresh-token


Sie müssen die Datei credentials.json an einem Ort ablegen, an dem Sie den Befehl ausführen.


⚠️ Beim Namen der Anmeldeinformationsdatei wird die Groß-/Kleinschreibung beachtet ⚠️

Erhalten Sie Zugriffstoken

Sobald die Konfiguration abgeschlossen ist, müssen Sie in Ihren automatisierten Tests ein Zugriffstoken erhalten. Ich würde sagen, dass der beste Ort dafür ein globales Setup ist (eine Funktion, die ausgeführt wird, bevor der Testlauf beginnt).


Es wird also etwa so aussehen:


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


Das obige Beispiel verwendet Umgebungsvariablen, für die Sie unbedingt auch das Paket dotenv installieren müssen.


Wenn Sie es jedoch einfach halten möchten, können Sie dieses Snippet überall dort verwenden, wo Sie den Zugriff auf das Token benötigen:


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

Erhalten Sie E-Mails

Derzeit verwendet die REST-API von Gmail eine eigene Abfragesprache , um die benötigte E-Mail zu finden:


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


Der obige Befehl gibt Ihnen ein E-Mail-Objekt zurück, Sie müssen jedoch entweder dessen Inhalt oder einen Link abrufen. Ersetzen from:squier7 subject:Test! zu Ihrer eigenen Abfrage, indem Sie der Syntax aus dem obigen Link folgen ☝️


Sie können einen Link mit einem regulären Ausdruck analysieren:


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


Ersetzen /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im durch Ihren eigenen regulären Ausdruck ☝️


ODER rufen Sie den gesamten HTML-Inhalt der E-Mail ab und rendern Sie ihn in Ihrem Browser:


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

Gesamt

Ich denke, es ist jetzt ziemlich offensichtlich, dass die Arbeit mit E-Mails in automatisierten Tests schwierig sein kann! Aber die Kenntnis dieser Tricks macht die Sache viel einfacher.


Möglicherweise nutzen Sie noch einige andere E-Mail-Dienste oder versuchen es mit IMAP , aber ich garantiere Ihnen, dass es nicht so einfach sein wird wie in dieser Anleitung, da Sie einen eigenen Helfer erstellen müssten, wie z. B. den von gmail-getter bereitgestellten Hier.


Das Playwright-Beispiel finden Sie auf GitHub . Zypressenbeispiel auch.