Playwright全局Setup未在测试前执行,求解决方案
修复Playwright全局Setup未运行的问题
问题分析
你的全局setup未运行,核心是两个配置错误加路径匹配问题导致:
- 路径匹配失效:配置里
testDir: './tests'指定了测试文件根目录,但global.setup.ts和配置文件同目录,Playwright会在./tests下查找setup文件,自然找不到目标文件。 - 配置项拼写错误:setup项目中写的
setTimeout是无效配置,正确的超时配置项应为timeout。
修复步骤
1. 修正Playwright配置文件
修改playwright.config.ts中的setup项目配置,解决路径和拼写问题:
- 给setup项目单独设置
testDir为当前目录(匹配setup文件所在位置) - 将
setTimeout修正为timeout
修改后的配置代码:
import { defineConfig } from '@playwright/test'; require('dotenv').config(); export default defineConfig({ testDir: './tests', timeout: 60 * 1000, expect: { timeout: 5000 }, forbidOnly: !!process.env.CI, workers: process.env.WORKERS ? +process.env.WORKERS : undefined, projects: [ { name: "setup", testMatch: /.*\.setup\.ts/, timeout: 60 * 1000, // 修正拼写错误 testDir: './', // 指定setup文件所在目录为当前目录 }, { name: "chrome", dependencies: ['setup'], use: { headless: true, browserName: "chromium", viewport: { width: 1280, height: 720 }, ignoreHTTPSErrors: true }, testMatch: '**/*.spec.ts' } ], reporter: [["list"], ["junit"]] });
2. 确认Setup文件的正确写法
确保global.setup.ts使用Playwright的test导出编写初始化逻辑,示例如下:
import { test as setup } from '@playwright/test'; setup('全局前置操作', async ({ browser }) => { // 这里编写你的全局初始化逻辑,比如登录、创建测试数据等 const page = await browser.newPage(); await page.goto('https://your-test-site.com/login'); // 执行登录步骤... // 如果需要保存上下文状态供后续测试使用,可添加: // await page.context().storageState({ path: './storageState.json' }); await page.close(); });
3. 可选方案:移动Setup文件到tests目录
如果不想修改setup项目的testDir,可以直接把global.setup.ts移到./tests目录下,这样原配置的testMatch就能匹配到它,同时记得修正setTimeout为timeout。
内容的提问来源于stack exchange,提问作者Saurav Likhar
相关产品推荐
相关产品推荐

