You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法用Playwright自动化含GitHub认证的测试——需输入邮箱验证码

解决Playwright自动化GitHub OAuth时的2FA验证码问题

核心原因

你的GitHub账号开启了双重认证(2FA),登录环节会触发验证码验证,这是自动化测试里常见的身份认证卡点。

可行解决方案

1. 预生成持久化登录态(推荐)

利用Playwright的storageState特性,提前完成一次带2FA的登录并保存会话状态,后续测试直接复用,跳过重复登录流程:

  • 完善你的global-setup.ts脚本,手动完成登录并存储会话:
// global-setup.ts
import { chromium, FullConfig } from '@playwright/test';

async function globalSetup(config: FullConfig) {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('/');
  await page.getByTestId('auth-github-auth-button').click();
  
  // 输入测试账号密码
  await page.getByLabel('Username or email address').fill('你的测试账号');
  await page.getByLabel('Password').fill('你的测试密码');
  await page.getByRole('button', { name: 'Sign in' }).click();
  
  // 暂停10秒手动输入邮箱收到的验证码(调试用,正式环境可替换为自动获取逻辑)
  await page.waitForTimeout(10000);
  
  // 登录完成后保存会话状态到指定路径
  await page.context().storageState({ path: './tests/storage/storage-state.json' });
  await browser.close();
}

export default globalSetup;
  • 运行一次playwright test完成首次登录,后续测试会自动读取storageState里的会话,不再触发登录流程。

2. 使用GitHub个人访问令牌(PAT)简化认证

如果你的Web应用支持,直接用GitHub PAT替代账号密码登录:

  • 给测试账号生成一个个人访问令牌,勾选repo、user等必要权限;
  • 修改测试代码,通过应用支持的方式传入PAT完成认证(比如请求头、专属表单字段)。

3. 为测试账号关闭2FA(不推荐)

若测试环境安全性要求极低,可给专用测试GitHub账号关闭2FA,避免触发验证码。但这种方式存在安全风险,仅适合完全隔离的测试场景。

4. 自动获取邮箱验证码

必须保留2FA时,用第三方邮件服务(如Mailosaur)自动获取验证码:

  • 将测试账号邮箱改为服务提供的临时邮箱;
  • 在测试代码中调用服务API抓取最新邮件里的验证码,自动填充到输入框。

额外检查点

  • 确认storageState路径配置正确,测试运行时能读取到已保存的会话;
  • 检查globalSetup.ts的路径是否和配置文件里的一致,确保前置脚本在测试前执行。

内容的提问来源于stack exchange,提问作者Tal Rofe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:05:17