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

Playwright测试使用storageState.json时test.use()调用报错

问题根因

这个报错的核心触发原因是test.use()调用位置不符合Playwright的语法规则:test.use()是测试框架的静态配置方法,仅允许在测试用例函数的外部作用域调用,你当前把test.use({storageState: 'storageState.json'})写在了test("test2", async ({page}) => { ... })的函数体内部,属于测试运行时才执行的逻辑,直接触发框架的位置校验报错。

解决步骤
  • 根据你需要应用登录态的范围,把storageState配置移到正确的位置:
    1. 单文件所有用例共用登录态:将test.use({storageState: 'storageState.json'})移到测试文件的顶部,所有test()定义块的外部即可,参考写法:
    import { test, expect } from '@playwright/test';
    import { GithubLandingPage } from '@/pages/GithubLandingPage';
    
    // 所有test块外部,文件级配置
    test.use({ storageState: 'storageState.json' });
    
    test("test2", async ({ page }) => {
      const githubpo = new GithubLandingPage(page);
      await githubpo.gotoPage();
      await githubpo.gotoIssues();
      // 后续测试逻辑
    });
    
    1. 仅单个测试用例使用该登录态:不需要调用test.use(),直接在对应测试用例的第二个配置参数里声明storageState即可,参考写法:
    test("test2", async ({ page }) => {
      const githubpo = new GithubLandingPage(page);
      await githubpo.gotoPage();
      await githubpo.gotoIssues();
      // 后续测试逻辑
    // 第二个参数为单用例配置
    }, { storageState: 'storageState.json' });
    
    1. 全局所有测试用例共用登录态:直接把storageState配置写到playwright.config.ts的全局use配置块中,无需在测试文件中重复调用test.use()。
  • 调整配置位置后如果仍复现报错,再排查依赖版本冲突问题:在项目根目录执行npm ls @playwright/test,检查输出结果中是否存在嵌套的多版本@playwright/test依赖。如果存在多版本,通过npm overrides配置强制全项目使用同一版本的@playwright/test即可。
  • 额外校验规则:不要在playwright.config.ts配置文件本身、或是被配置文件导入的公共工具文件中调用test.use(),这类调用也会触发相同报错。

内容的提问来源于stack exchange,提问作者Gunaseelan Ramalingam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:36:21