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

Playwright测试本地运行正常,GitLab CI中持续超时求助

解决GitLab CI中Playwright测试Vite React应用的导航超时问题

针对本地测试正常但GitLab CI中出现导航超时、页面关闭的问题,以下是针对性的排查和修复方案:

1. 修正WebServer启动配置

你的Playwright配置中reuseExistingServer: true在CI环境下无意义(CI为全新环境,无复用服务器),且可能导致服务启动检测不充分。建议调整为:

webServer: {
  command: "npm run start",
  url: "http://localhost:5173",
  reuseExistingServer: false, // CI环境禁用复用
  timeout: 60000, // 延长启动超时到60秒
  waitFor: async ({ page }) => {
    await page.waitForSelector('body > #root'); // 等待应用根元素加载完成,确保服务真正就绪
  },
},

2. 优化页面导航等待逻辑

报错显示等待steps/3超时,但实际仅导航到steps/1、steps/2,说明CI环境下路由跳转延迟更高,或等待策略不合理:

  • 合并跳转与等待逻辑,改用更适合SPA的等待策略:
    await page.goto(`http://localhost:5173/projects/load?ip=${test_param_id}`, {
      waitUntil: 'networkidle', // 等待网络空闲,适配SPA异步加载特性
      timeout: 60000,
    });
    // 用通配符匹配URL,避免硬编码完整路径
    await page.waitForURL('**/steps/1', { timeout: 60000 });
    
  • 若路由跳转依赖API请求,优先等待页面元素而非URL:
    await page.goto(`http://localhost:5173/projects/load?ip=${test_param_id}`);
    // 等待步骤1的容器元素出现,确保页面渲染完成
    await page.waitForSelector('[data-testid="step-1-container"]', { timeout: 60000 });
    

3. 排查CI环境下的应用异常

页面关闭错误可能是应用在CI中出现未捕获崩溃,可通过以下方式排查:

  • 在Playwright配置中开启控制台日志捕获:
    use: {
      // ...其他配置
      console: 'on', // 捕获所有控制台日志,便于排查应用报错
    },
    
  • 检查Vite的CI环境配置,确认API地址、静态资源路径等环境变量是否正确。

4. 调整CI资源与超时设置

GitLab CI Runner资源有限可能导致运行缓慢,可做以下调整:

  • 在.gitlab-ci.yml中增加资源限制(需GitLab Premium支持):
    playwright:
      # ...其他配置
      resources:
        limits:
          memory: 4G
          cpu: 2
    
  • 延长Playwright全局与操作超时:
    export default defineConfig({
      timeout: 60000, // 全局超时设为60秒
      use: {
        actionTimeout: 30000, // 单个操作超时
      },
      // ...其他配置
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:47