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

如何在测试中创建两个拥有独立IndexedDB的Playwright上下文?

Playwright多浏览器上下文的IndexedDB隔离解决方案

Playwright的不同浏览器上下文确实拥有完全独立的IndexedDB实例,你遇到的“数据共享”现象,基本都是测试逻辑的疏漏,而非框架隔离机制失效。

常见问题原因

  • 测试时未在对应上下文的页面中独立执行IndexedDB操作,比如误将同一页面的操作逻辑复用给了两个上下文
  • 未等待IndexedDB读写操作完成就进行验证,导致数据状态未同步

正确的测试示例

以下代码可验证两个上下文的IndexedDB完全隔离:

// 第一个上下文:写入数据
const context1 = await browser.newContext();
const page1 = await context1.newPage();
await page1.goto('你的应用URL');
// 在page1的上下文中写入IndexedDB
await page1.evaluate(async () => {
  // 这里替换成你应用实际的IndexedDB写入逻辑
  const db = await openDB('myAppDB', 1);
  await db.put('userData', { id: 1, name: 'Context1 User' });
});

// 第二个上下文:验证隔离性
const context2 = await browser.newContext();
const page2 = await context2.newPage();
await page2.goto('你的应用URL');
// 在page2的上下文中读取数据
const result = await page2.evaluate(async () => {
  const db = await openDB('myAppDB', 1);
  return await db.get('userData', 1);
});

// 验证结果:应为undefined(或应用初始值),而非Context1写入的数据
console.log(result); // 输出undefined

// 清理资源
await context1.close();
await context2.close();

关键注意事项

  • 每个上下文必须独立创建页面,且页面需单独加载应用,禁止复用页面实例
  • 所有IndexedDB操作必须通过page.evaluate()在对应页面的上下文中执行,避免跨上下文的变量污染
  • 如果应用包含服务器同步逻辑,测试时建议禁用同步,确保验证的是本地IndexedDB的隔离状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:12:36