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

GitHub Actions中Playwright测试认证失败排查求助

解决Playwright结合GitHub Secrets认证失败的问题

核心排查方向

虽然GitHub Actions日志显示Secrets已注入(),但实际可能存在环境变量未正确传递或认证后页面状态异常*两种情况,按以下步骤逐一排查:

1. 先确认环境变量是否真的传递到测试代码

直接在测试的beforeEach中添加调试日志(不会泄露敏感信息):

test.beforeEach(async ({ page }) => {
  // 确认变量是否存在
  console.log('USERNAME exists:', !!process.env.USERNAME);
  console.log('PASSWORD exists:', !!process.env.PASSWORD);
  
  await page.goto('/');
  // ... 后续代码
});

重新运行CI,如果日志输出false,说明变量未正确传递;如果是true,则问题出在认证流程或页面跳转上。

2. 修复环境变量传递问题

如果变量未传递,尝试以下两种方案:

方案A:在CI中创建临时.env文件

和本地测试逻辑保持一致,在GitHub Actions中生成.env文件,避免依赖dotenv的加载差异:
在Run Playwright tests步骤前添加:

- name: Generate .env file for CI
  run: |
    echo "USERNAME=${{ secrets.USERNAME }}" >> .env
    echo "PASSWORD=${{ secrets.PASSWORD }}" >> .env

确保你的代码中已经通过dotenv.config()加载.env文件(本地测试应该已经配置)。

方案B:移除TypeScript非空断言的潜在隐患

直接使用变量前添加校验,避免!断言掩盖变量未定义的问题:

test.beforeEach(async ({ page }) => {
  await page.goto('/');
  
  const username = process.env.USERNAME;
  const password = process.env.PASSWORD;
  
  if (!username || !password) {
    throw new Error('环境变量USERNAME或PASSWORD未设置');
  }
  
  await page.getByPlaceholder('Email').fill(username);
  await page.getByPlaceholder('Password').fill(password);
  // ... 后续代码
});

如果变量未设置,会直接抛出明确错误,而非模糊的超时。

3. 排查认证后的页面异常

如果变量已确认存在,问题大概率是认证失败或页面跳转未完成:

方案A:添加导航等待

点击登录按钮时,同步等待页面跳转完成,避免提前查找元素:

// 替换原有的登录点击代码
await Promise.all([
  page.waitForNavigation({ waitUntil: 'networkidle' }),
  page.getByRole('button', { name: 'Sign in' }).click()
]);

确保页面完全加载后再执行下一步操作。

方案B:查看Playwright测试报告

CI执行完成后,下载playwright-report artifact,查看测试的视频和截图:

  • 确认登录时是否填入了正确的用户名/密码
  • 点击登录后页面是否跳转到预期的仪表盘,还是显示错误页
  • 检查是否有页面崩溃或跳转异常的情况

4. 额外优化:增加超时时间

CI环境网络可能较慢,适当延长测试超时时间:
在playwright.config.ts中调整:

export default defineConfig({
  timeout: 60000, // 全局超时设为60秒
  use: {
    actionTimeout: 15000, // 单个操作超时设为15秒
  },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:10:54