Playwright测试使用storageState.json时test.use()调用报错
问题根因
这个报错的核心触发原因是test.use()调用位置不符合Playwright的语法规则:test.use()是测试框架的静态配置方法,仅允许在测试用例函数的外部作用域调用,你当前把test.use({storageState: 'storageState.json'})写在了test("test2", async ({page}) => { ... })的函数体内部,属于测试运行时才执行的逻辑,直接触发框架的位置校验报错。
解决步骤
- 根据你需要应用登录态的范围,把storageState配置移到正确的位置:
- 单文件所有用例共用登录态:将
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(); // 后续测试逻辑 });- 仅单个测试用例使用该登录态:不需要调用
test.use(),直接在对应测试用例的第二个配置参数里声明storageState即可,参考写法:
test("test2", async ({ page }) => { const githubpo = new GithubLandingPage(page); await githubpo.gotoPage(); await githubpo.gotoIssues(); // 后续测试逻辑 // 第二个参数为单用例配置 }, { storageState: 'storageState.json' });- 全局所有测试用例共用登录态:直接把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
相关产品推荐
相关产品推荐

