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

Playwright报错:ReferenceError: browserContext is not defined 求助

解决Playwright中ReferenceError: browserContext is not defined的问题

错误原因

你在addInitScript的回调里调用了browserContext.clearCookies(),但这个回调函数是在浏览器页面的JavaScript环境中执行的,而browserContext是Node.js测试代码里定义的变量,浏览器环境根本识别不了它。另外clearCookies()是Playwright的Node端API,也不能在浏览器里调用。

正确实现方式

  1. 清除Cookies要在Node端调用,直接用browserContext.clearCookies()(其实新创建的browserContext默认就是无Cookies的,这步可选)
  2. localStorage和sessionStorage是浏览器端API,需要放在addInitScript里,但不需要带browserContext

修改后的完整代码:

// tests/specs/login.spec.js
const { test, expect } = require('@playwright/test');
require('dotenv').config();

test.describe('Automates: CO-6367', () => {
  let browserContext, page;

  test.beforeEach(async ({ browser }) => {
    browserContext = await browser.newContext();
    // 可选:主动清除Cookies,新context默认已无Cookies
    await browserContext.clearCookies();
    page = await browserContext.newPage();

    await browserContext.addInitScript(() => {
      // 仅保留浏览器环境可识别的API
      localStorage.clear();
      sessionStorage.clear();
    });

    await page.goto(`${process.env.BASE_URL}/login`);
  });

  test.afterEach(async () => {
    await browserContext.close();
  });

  test('User logs into BO via URL with correct credentials', async () => {
    await page.fill('#email', process.env.BO_LOGIN_EMAIL);
    await page.fill('#password', process.env.BO_LOGIN_PASSWORD);
    await page.click('button[type="submit"]');
    await page.waitForURL('**/dashboards/main');
    const dashboardHeading = await page.locator('role=heading[name="Dashboard"]');
    await expect(dashboardHeading).toBeVisible();
  });
});

额外说明

Playwright每次创建新的browserContext时,都会生成完全隔离的环境,默认就自带空的Cookies、localStorage和sessionStorage。如果你的需求只是保证每个测试用干净的环境,甚至可以省略手动清除的步骤,直接创建新context即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:32:42