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

Playwright(TypeScript)使用Filechooser上传文件报ENOENT路径错误

问题根因

fileChooser.setFiles() 解析相对路径时,基准路径是你执行Playwright测试命令时的终端工作目录,而非当前测试文件WaterTDLApp.Spec.ts的所在目录。你写的../../attachments/TDL/relevantfile-sample.pdf层级计算错误,最终路径被解析到了C:\attachments\TDL\relevantfile-sample.pdf,和实际文件位置不匹配,触发文件不存在的报错。
你的FileChooser等待逻辑写法是正确的,waitForEvent写在触发弹窗的click操作之前没有问题,不需要调整这部分代码,只需要修复文件路径即可。

修复方案

优先使用绝对路径写法,完全不受测试执行目录影响,稳定性最高:

  1. 在测试文件顶部引入Node.js路径处理模块:
import path from 'path';
  1. 按照描述的目录结构(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:09:22