Playwright报错:ReferenceError: browserContext is not defined 求助
解决Playwright中
ReferenceError: browserContext is not defined的问题 错误原因
你在addInitScript的回调里调用了browserContext.clearCookies(),但这个回调函数是在浏览器页面的JavaScript环境中执行的,而browserContext是Node.js测试代码里定义的变量,浏览器环境根本识别不了它。另外clearCookies()是Playwright的Node端API,也不能在浏览器里调用。
正确实现方式
- 清除Cookies要在Node端调用,直接用
browserContext.clearCookies()(其实新创建的browserContext默认就是无Cookies的,这步可选) 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
相关产品推荐
相关产品推荐

