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

Playwright测试在Docker并行模式失败,串行模式正常求助

解决方案:Docker中Playwright并行测试失败问题

针对「Navigation failed because page crashed!」错误

  • 限制并行Worker数量:在playwright.config.ts中降低workers配置,避免资源耗尽。结合你的Docker 8核8G配置,建议设置为固定数值或按CPU比例分配:
    export default defineConfig({
      workers: 4, // 或设置为 '50%',表示使用一半CPU核心数
    });
    
  • 增大Docker共享内存:Chrome在Docker环境下依赖足够的共享内存,启动容器时添加--shm-size=2g参数,或在docker-compose.yml中配置:
    services:
      your-service:
        shm_size: '2gb'
    
  • 优化浏览器启动参数:在playwright.config.ts中添加减少资源消耗的浏览器启动参数:
    export default defineConfig({
      use: {
        launchOptions: {
          args: [
            '--disable-gpu',
            '--no-sandbox',
            '--disable-dev-shm-usage',
            '--single-process'
          ]
        }
      }
    });
    

针对临时文本断言失败问题

  • 调整断言逻辑,优先等待最终状态:临时加载文本的出现时机受并行资源波动影响大,建议先等待加载文本消失,再断言目标业务元素状态,而非直接依赖加载文本可见:
    // 可选:等待加载文本出现(根据业务场景决定是否需要)
    await page.getByText("Loading...").waitFor({ state: "visible", timeout: 5000 });
    // 等待加载完成(加载文本消失)
    await page.getByText("Loading...").waitFor({ state: "hidden" });
    // 断言最终可交互元素可见
    await expect(page.getByRole("button", { name: "确认" })).toBeVisible();
    
  • 使用模糊匹配与延长超时:针对临时文本的细微格式差异(如「Loading..」和「Loading...」),用正则匹配并延长断言超时时间:
    await expect(page.getByText(/Loading\.+/, { exact: false })).toBeVisible({ timeout: 10000 });
    
  • 强制上下文完全隔离:显式在每个测试前后创建/销毁浏览器上下文,彻底避免并行测试间的资源竞争:
    let page: Page;
    let context: BrowserContext;
    
    test.beforeEach(async ({ browser }) => {
      context = await browser.newContext();
      page = await context.newPage();
    });
    
    test.afterEach(async () => {
      await page.close();
      await context.close();
    });
    
  • 禁用浏览器实例复用:在playwright.config.ts中关闭实例复用,确保每个测试使用全新的浏览器实例:
    export default defineConfig({
      use: {
        launchOptions: {
          reuseExistingServer: false
        }
      }
    });
    

内容的提问来源于stack exchange,提问作者utkarsh-k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:13