大家好! 在自动化测试中阅读电子邮件是一个技巧,您可能需要知道如何在很多项目中做到这一点。这是原因以及如何处理它...... 为什么这很重要? 好吧,如果系统发送电子邮件 - 您可能需要验证它们是否正在发送并且内容是否正确,包括可点击的链接。 因此,当您需要此功能时,通常会出现以下情况: 报名。 许多平台在您创建帐户后都会发送一封确认电子邮件,您需要点击电子邮件中的确认链接。 发票。 如果您的应用进行任何付款 - 他们通常通过电子邮件发送支票或发票,因此您可能想查看其内容是否也正确。 结果。 就像医学检查结果一样。根据我的经验 - 一些医院在完成后会发送一封包含测试结果的电子邮件(或者至少是一个指向个人页面的链接,您可以在其中查看报告)。 …… 当然,这不是完整的列表 - 这些只是我在职业生涯中遇到最多的用例。 如果无法验证这些情况,可能会导致用户收不到电子邮件或收到电子邮件中的错误信息。在其中一个项目中,它帮助我们尽早发现了过期的 代币。 SendGrind 在测试中阅读电子邮件有哪些并发症? 阅读电子邮件是一件棘手的事情,但并非不可能。 早期的电子邮件客户端使用 从服务器获取电子邮件,但有一个小问题 - 一旦下载电子邮件,它就会从服务器中删除电子邮件。 POP3 后来, 协议出现了 - 它允许您简单地从服务器读取电子邮件。 IMAP 问题是 - 或者 当您第一次连接时(例如重新启动自动化测试时)。 某些服务禁止这些协议 让你确认你的身份 另一方面,像 这样的一些服务提供了 来操作您的电子邮件,但还有另一个问题 - 文档及其库并不是真正的用户友好(特别是对于那些不经常进行电子邮件测试的人来说)。 Gmail REST API 这就是 用武之地 - 一个 库,它允许您阅读电子邮件,如果您使用 等浏览器自动化工具,甚至可以在浏览器中打开它们。 gmail-getter 的 npm Playwright 使用 Gmail-Getter 阅读 Gmail 电子邮件 首先,您需要在项目中安装该软件包: npm install gmail-getter 创建 Google Cloud Console 项目并获取凭证 要登录 您需要获取凭据: 、 和 。这些凭据可让您获取访问令牌,这是进一步请求(例如获取电子邮件列表或单个电子邮件等)所必需的。 Gmail API, 客户端 ID 客户端密钥 刷新令牌 步骤: 在 中创建一个项目。 Google Cloud Console 在 部分中创建 ( ”)并下载它。 “API 和服务” OAuth 凭据 如果需要进行自动化测试,最好选择此处的 应用程序 “桌面 启用 。 Gmail API 获取刷新令牌。 要获取刷新令牌 - 只需在项目根目录中执行命令: npx gmail-getter get-refresh-token (或者其他任何地方,如果你已经全局安装了该软件包) get-refresh-token 您必须将 文件放在将执行命令的位置。 credentials.json ⚠️凭证文件名区分大小写⚠️ 获取访问令牌 配置完成后,您必须在自动化测试中获取访问令牌。我想说它的最佳位置是全局设置(在测试运行开始之前执行的函数)。 所以,它会是这样的: 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! ) } 上面的示例使用环境变量,为此您肯定还需要安装 包。 dotenv 但是,如果您想让事情变得简单 - 您可以在任何需要访问令牌的地方使用此代码片段: const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) 获取电子邮件 目前, 使用 来查找您需要的电子邮件: Gmail 的 REST API 自己的查询语言 const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') 上面的命令返回一个电子邮件对象,但您仍然需要获取其内容或链接。替换 按照上面链接中的语法进行您自己的查询☝️ from:squier7 subject:Test! 您可以使用 解析链接: 正则表达式 const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im) 将 为你自己的正则表达式 ☝️ /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im 或者获取电子邮件的完整 HTML 内容,并将其呈现在浏览器中: 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 }) 全面的 我认为现在很明显,在自动化测试中使用电子邮件可能很棘手!但了解这些技巧会让事情变得容易得多。 您可能仍然会使用其他一些电子邮件服务或尝试 ,但我向您保证 - 它不会像本指南中那样容易,因为您需要创建自己的帮助程序,例如提供的 这里。 IMAP gmail-getter 您可以在 上找到 。 。 GitHub Playwright 示例 柏树也是一个例子