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

Playwright串行执行测试时出现browserType.launch超时问题求助

问题描述

环境信息

  • Playwright版本:@playwright/test": "^1.29.2"
  • 浏览器:Microsoft Edge

错误信息

"browserType.launch: Timeout 180000ms exceeded at Object.playwrightFixtures.browser.scope [as fn]"

测试场景
项目包含3个测试模块,每个模块有8-9个E2E测试用例:

  • 串行运行全部测试时,前2个模块约343秒完成,但执行第3个模块时抛出上述超时错误
  • 单独执行每个模块测试均正常,但需要一次性执行全部测试

疑问

  1. 该如何解决此问题?
  2. 是否需要手动修改project\node_modules@playwright\test\lib\index.js:180:51) at node_modules@playwright\test\lib\fixtures.js:95:81文件中的超时设置?

解决方案

绝对不要手动修改node_modules里的文件——一来升级依赖会直接覆盖你的修改,二来容易引入未知的兼容性问题。以下是几种可行的解决思路:

1. 直接配置浏览器启动超时

在playwright.config.js中自定义浏览器启动的超时时间,覆盖默认的180秒(180000ms):

module.exports = {
  use: {
    // 保留你的其他配置
    launchOptions: {
      timeout: 300000, // 调整为5分钟,可根据实际耗时修改
    },
  },
};

如果只想针对Edge浏览器配置,可以在项目列表中单独设置:

module.exports = {
  projects: [
    {
      name: 'edge',
      use: {
        browserName: 'msedge',
        launchOptions: {
          timeout: 300000,
        },
      },
    },
  ],
};

2. 排查资源占用问题

串行运行到第三个模块才报错,大概率是前两个模块运行后系统资源(内存、CPU)被占满,导致Edge启动缓慢。可以做这些排查:

  • 检查测试用例是否有未正确关闭的页面/浏览器上下文,确保每个测试结束后资源完全释放
  • 用系统监控工具(比如任务管理器)观察前两个模块运行后的内存、CPU占用情况
  • 添加测试后清理钩子,强制释放资源:
test.afterEach(async ({ browser }) => {
  const contexts = browser.contexts();
  await Promise.all(contexts.map(context => context.close()));
});

3. 优化测试执行的资源消耗

  • 将大模块拆分为更小的测试文件,避免单个模块持续占用过多资源
  • 确认Playwright的测试隔离功能处于开启状态(默认开启),保证每个测试用例拥有独立的运行环境
  • 如果机器资源允许,也可以尝试并行运行测试(但如果你必须串行,这条可忽略)

4. 升级Playwright版本

1.29.2是较旧的版本,后续官方修复了不少浏览器启动和资源管理相关的bug,升级到最新稳定版可能直接解决问题:

npm install @playwright/test@latest
npx playwright install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:55:27