Playwright测试执行成功但未生成视频录制文件
Playwright视频录制未生成的排查与解决步骤
1. 确认配置文件的正确性
首先确保playwright.config.js中的视频配置在use区块内,模式设置正确,也可自定义视频输出目录(未指定时默认存放在test-results目录):
module.exports = { use: { video: 'on', // 可选值: 'on' | 'off' | 'retain-on-failure' | 'on-first-retry' outputDir: './test-videos', // 自定义视频输出目录,可省略 // 其他基础配置:viewport, baseURL等 }, // 其他配置:projects, reporter等 };
注意:video配置需放在全局use或对应项目的use块中,不能独立于这些区块设置。
2. 修复afterEach钩子的视频处理逻辑
你的handleTestVideo函数可能未正确获取视频对象,Playwright中需通过test.info().video获取视频,而非直接读取附件。正确的处理示例:
const fs = require('fs').promises; test.afterEach(async ({}, testInfo) => { if (testInfo.video) { const videoPath = testInfo.video.path(); console.log(`视频已生成:${videoPath}`); // 示例:重命名视频文件以便识别 await fs.rename(videoPath, `./test-videos/${testInfo.title.replace(/\s+/g, '-')}.webm`); } else { console.log("未录制到视频"); } });
注意:test.info().attachments不会自动包含视频文件,视频需通过testInfo.video单独获取。
3. 排查常见环境与执行问题
- 无头模式兼容:Playwright 1.47默认使用
headless: 'new',该模式支持视频录制;手动设置headless: false(有头模式)也可正常录制,无需额外配置。 - 目录权限检查:Windows下确认
outputDir所在目录有写入权限,避免因权限不足导致视频无法保存。 - 测试完整性验证:若测试用例被
test.skip()跳过,或执行中提前终止(如未完成所有步骤),可能不会生成视频。 - Node.js版本适配:Playwright 1.47推荐使用Node.js 18+,16.x虽能兼容,但升级到18.x可避免潜在的版本适配问题。
4. 直接验证配置生效
执行测试后,直接查看指定的outputDir或默认的test-results目录,确认是否存在.webm格式的视频文件。若目录中有视频但钩子未检测到,需检查钩子逻辑是否有误。
内容的提问来源于stack exchange,提问作者Laurie Crean
相关产品推荐
相关产品推荐

