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

Playwright UI模式开发时能否保留登录状态?

如何在Playwright开发周期中维持登录状态

我已按照Playwright认证文档配置项目,实现登录后存储状态且后续测试运行正常。现在需要解决的问题是:能否在开发周期中维持登录状态?希望打开Playwright UI后仅执行一次登录,之后编写测试用例时重跑单个测试无需再次登录。

当前配置代码

auth.setup.ts

import {test as setup, expect } from '@playwright/test';

const sessionFile = 'playwright/.auth/session.json';

setup('login', async ({ page }) => {
    await page.goto('/');
    // 登录步骤...

    await page.context().storageState({ path: sessionFile });
});

playwright.config.ts

...
  projects: [
    {
      name: 'setup',
      testMatch: /.*\.setup\.ts/
    },
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
      dependencies: ['setup'],
    },
  ]
...

my.spec.ts

import { test, expect } from '@playwright/test';

test.use({ storageState: 'playwright/.auth/session.json' });

test('should pass', async ({ page }) => {
  await page.goto('/some/page');
  ...
});

解决方案

完全可以实现这个需求,只需修改auth.setup.ts脚本,添加登录状态文件的存在性检查:

修改后的auth.setup.ts

import { test as setup, expect } from '@playwright/test';
import { existsSync } from 'fs';

const sessionFile = 'playwright/.auth/session.json';

setup('login', async ({ page }) => {
  // 检测到已存在登录状态文件时,直接跳过登录流程
  if (existsSync(sessionFile)) {
    console.log('登录状态文件已存在,跳过登录');
    return;
  }

  await page.goto('/');
  // 登录步骤...

  await page.context().storageState({ path: sessionFile });
});

运行逻辑

  • 首次启动Playwright UI或执行测试时,session.json不存在,setup脚本会完整执行登录流程并生成状态文件。
  • 后续重跑单个测试、修改测试代码后重新运行时,session.json已存在,setup脚本直接跳过登录,测试复用已有登录状态。
  • 若登录状态过期,删除playwright/.auth/session.json文件,重新运行测试或启动Playwright UI,即可重新执行登录生成新的状态文件。

保持playwright.config.ts中测试项目对setup项目的依赖配置不变,Playwright会自动处理setup的执行逻辑。

内容的提问来源于stack exchange,提问作者Mateusz Marchel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:25:26