如何停止Playwright中Before Hooks运行以保留手动登录状态?
解决Playwright测试刷新已登录页面的问题
Playwright默认会在每个测试执行前重置页面(比如导航到空白页或指定的baseURL),导致你手动登录的状态丢失。可以通过以下几种方式解决:
方法一:连接到已运行的浏览器实例
手动启动带调试端口的Playwright浏览器,执行命令:
npx playwright open --remote-debugging-port=9222打开浏览器后手动完成Google登录,保持浏览器窗口不要关闭。
修改
playwright.config.ts配置,让测试连接到这个已运行的浏览器:import { defineConfig } from '@playwright/test'; export default defineConfig({ use: { connectOptions: { wsEndpoint: 'ws://localhost:9222', }, baseURL: undefined, // 禁止自动导航到指定URL headless: false, }, });修改测试用例,直接复用已打开的页面:
import { test, expect } from '@playwright/test'; test('搜索Apple', async ({ browser }) => { // 获取已登录的第一个标签页 const pages = await browser.pages(); const page = pages[0]; await page.getByLabel('Search', { exact: true }).click(); await page.getByLabel('Search', { exact: true }).fill('Apple'); await page.getByRole('link', { name: 'Apple - Official Site apple.' }).click(); });
方法二:使用持久化上下文保留登录状态
启动带持久化存储的浏览器,执行命令:
npx playwright open --persistent-context ./my-persistent-profile在这个浏览器中完成手动登录,关闭浏览器后登录状态会保存在
./my-persistent-profile目录中。修改配置文件,让测试复用这个持久化上下文:
import { defineConfig } from '@playwright/test'; export default defineConfig({ use: { persistentContextDir: './my-persistent-profile', baseURL: undefined, // 避免自动导航刷新页面 }, });测试用例可以直接使用已保留登录状态的页面,无需修改原有代码(只要确保测试不主动刷新页面)。
方法三:禁用测试的自动页面重置
如果不想修改全局配置,可以在单个测试中禁用自动导航:
import { test, expect } from '@playwright/test'; // 针对当前测试禁用自动导航 test.use({ baseURL: undefined }); test('搜索Apple', async ({ page }) => { // 此时page不会被提前刷新,直接操作已登录的页面 await page.getByLabel('Search', { exact: true }).click(); await page.getByLabel('Search', { exact: true }).fill('Apple'); await page.getByRole('link', { name: 'Apple - Official Site apple.' }).click(); });
内容的提问来源于stack exchange,提问作者Anurag Karthik Polamarasetty
相关产品推荐
相关产品推荐

