Playwright(TypeScript)使用Filechooser上传文件报ENOENT路径错误
问题根因
fileChooser.setFiles() 解析相对路径时,基准路径是你执行Playwright测试命令时的终端工作目录,而非当前测试文件WaterTDLApp.Spec.ts的所在目录。你写的../../attachments/TDL/relevantfile-sample.pdf层级计算错误,最终路径被解析到了C:\attachments\TDL\relevantfile-sample.pdf,和实际文件位置不匹配,触发文件不存在的报错。
你的FileChooser等待逻辑写法是正确的,waitForEvent写在触发弹窗的click操作之前没有问题,不需要调整这部分代码,只需要修复文件路径即可。
修复方案
优先使用绝对路径写法,完全不受测试执行目录影响,稳定性最高:
- 在测试文件顶部引入Node.js路径处理模块:
import path from 'path';
- 按照描述的目录结构(
src/tests与src/attachments平级),基于当前测试文件位置拼接文件绝对路径:
// CommonJS模式下直接用__dirname即可 const filepath = path.resolve(__dirname, '../attachments/TDL/relevantfile-sample.pdf');
如果你用的是ESModule规范的TS配置(package.json中type: "module"),没有内置__dirname变量,补全路径定义即可:
import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const filepath = path.resolve(__dirname, '../attachments/TDL/relevantfile-sample.pdf');
验证技巧
如果不确定路径拼接是否正确,可以在路径定义后加一行日志打印最终解析的完整路径,去本地文件管理器对应位置确认文件存在即可:
console.log('上传文件完整路径:', path.resolve(filepath));
如果你始终固定在项目根目录执行npx playwright test命令,也可以直接写基于项目根的相对路径,不过这种方式灵活性差,切换执行目录就会复现路径错误:
// 仅当执行命令的工作目录为项目根时生效 const filepath = 'src/attachments/TDL/relevantfile-sample.pdf';
内容的提问来源于stack exchange,提问作者Tester JB
相关产品推荐
相关产品推荐

