Olá pessoal! Ler e-mails em testes automatizados é um truque que você talvez precise saber fazer em muitos projetos. Veja por que e como lidar com isso… Por que isso é importante? Bem, se o sistema envia e-mails - você pode querer verificar se eles estão sendo enviados e se o conteúdo está correto, incluindo links clicáveis. Então, estes são os cenários usuais quando você precisa disso: Inscrever-se. Muitas plataformas enviam um e-mail de confirmação assim que você cria uma conta, e você precisa clicar em um link de confirmação do e-mail. Faturas. Se o seu aplicativo fizer algum pagamento, eles geralmente enviam um cheque ou fatura por e-mail, então você também pode querer ver se o conteúdo deles está correto. Resultados. Como resultados de exames médicos. Na minha experiência, alguns hospitais enviam um e-mail com os resultados dos testes assim que concluídos (ou pelo menos um link para uma página pessoal onde você pode visualizar o relatório). … Claro, esta não é a lista completa – estes são apenas os casos de uso que mais conheci em minha carreira. A falha na verificação desses cenários pode fazer com que os usuários não recebam e-mails ou recebam informações erradas nos e-mails. Em um dos projetos, isso nos ajudou a encontrar antecipadamente um token expirado. SendGrind Quais são as complicações da leitura de e-mails em testes? Ler e-mails é algo complicado, mas não impossível. Os primeiros clientes de e-mail usavam para buscar e-mails do servidor, mas há um pequeno problema: ele exclui os e-mails do servidor assim que são baixados. POP3 Mais tarde, surgiu o protocolo - ele permite que você simplesmente leia e-mails do servidor. IMAP O problema é - ou quando você se conecta pela primeira vez (como quando você reinicia um teste automatizado). alguns serviços proíbem esses protocolos fazer você confirmar sua identidade Por outro lado, alguns serviços como fornecem uma para manipular seus e-mails, mas há outro problema - a documentação e suas bibliotecas não são tão fáceis de usar (especialmente para quem não trabalha muito com testes de e-mail). o Gmail API REST É aqui que entra - uma biblioteca que permite ler e-mails e até mesmo abri-los em seu navegador se você usar ferramentas de automação de navegador como . o gmail-getter npm Playwright Lendo e-mails do Gmail com Gmail-Getter Primeira coisa: você precisa instalar o pacote em seu projeto: npm install gmail-getter Crie um projeto do Console do Google Cloud e obtenha credenciais Para fazer login na você precisa obter credenciais: um , um e um . Essas credenciais permitem que você obtenha um token de acesso, que é necessário em solicitações posteriores (como obter uma lista de e-mails ou um único e-mail, etc.). API do Gmail, ID do cliente segredo do cliente token de atualização Passos a seguir: Crie um projeto no . Console do Google Cloud Crie na seção ( ) e faça o download. credenciais OAuth API e serviços de preferência, selecione Aplicativo lá se precisar para testes automatizados de desktop Ative a . API do Gmail Obtenha um token de atualização. Para obter um token de atualização - basta executar um comando na raiz do projeto: npx gmail-getter get-refresh-token (ou em qualquer outro lugar se você tiver o pacote instalado globalmente) get-refresh-token Você deve colocar o arquivo em um local onde executará o comando. credentials.json ⚠️ o nome do arquivo de credenciais diferencia maiúsculas de minúsculas ⚠️ Obter token de acesso Depois de concluída a configuração, você deverá obter um token de acesso em seus testes automatizados. Eu diria que o melhor lugar para isso é uma configuração global (uma função que é executada antes do início do teste). Então, será algo assim: 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! ) } O exemplo acima usa variáveis de ambiente, para as quais você definitivamente precisará instalar o pacote também. dotenv Mas, se quiser manter as coisas simples - você pode usar este snippet sempre que precisar que o token esteja acessível: const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) Obter e-mails No momento, usa para encontrar o e-mail que você precisa: a API REST do Gmail sua própria linguagem de consulta const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') O comando acima retorna um objeto de e-mail, mas você ainda precisa obter seu conteúdo ou um link. Substituir para sua própria consulta seguindo a sintaxe do link acima ☝️ from:squier7 subject:Test! Você pode analisar um link usando : um regex const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im) Substitua pela sua própria expressão regular ☝️ /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im OU obtenha todo o conteúdo HTML do e-mail e renderize-o em seu 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 }) Geral Acho que está bastante óbvio agora que trabalhar com e-mails em testes automatizados pode ser complicado! Mas conhecer esses truques torna as coisas muito mais fáceis. Você ainda pode usar outros serviços de e-mail ou tentar , mas garanto que não será tão fácil quanto neste guia, pois você precisará criar seu próprio auxiliar, como fornecido aqui. o IMAP o gmail-getter Você pode encontrar o no . também. exemplo do Playwright GitHub Exemplo de cipreste