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

Playwright JavaScript中能否在同一个浏览器上下文运行多个测试用例?

@playwright/test 同浏览器窗口多测试用例运行方案

首先明确结论:完全可以在同一个浏览器窗口中运行多个测试用例,你遇到的测试耗时大幅增加的问题,是现有代码实现逻辑错误导致的,具体问题和改造方案如下:

现有代码的核心问题

你在test.beforeAll中创建的context和page是局部变量,并没有挂载到全局测试上下文,每个test函数中注入的page是@playwright/test默认生成的独立页面实例,每个测试执行结束后默认销毁,所以才会频繁创建/销毁页面、上下文甚至浏览器实例,导致耗时增加。

改造后的实现代码

// 将context和page定义在测试文件顶层作用域,供所有测试用例共用
let context;
let page;

test.beforeAll(async ({ browser }) => {
  context = await browser.newContext();
  page = await context.newPage();
  await page.goto('https://example.com');
});

test('nav test', async () => {
  // 直接使用全局共用的page实例,不要注入默认的page参数
  const name = await page.innerText('.navbar__title');
  expect(name).toBe('Playwright');
});

test('header test', async () => {
  const name = await page.innerText('.navbar__header');
  expect(name).toBe('Playwright');
});

// 所有测试执行完成后统一销毁上下文
test.afterAll(async () => {
  await context.close();
});

注意事项

  • 多个测试用例共享同一个页面实例时,用例之间会共享页面状态,前面用例的操作会影响后续用例的执行结果。建议根据业务场景合理安排测试用例执行顺序,或者在test.afterEach钩子中添加页面状态重置逻辑,比如清空输入内容、回到初始页面等,避免用例之间互相干扰。
  • 如果你不需要完全共享同一个页面,只是想减少新开浏览器的耗时,也可以只共用context实例,每个测试用例单独从共用context中创建新的page,这种方式页面状态隔离度更高,同时也能大幅降低测试耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:57:00