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
相关产品推荐
相关产品推荐

