记事本做网站怎么不行啦,wordpress外贸网站,合肥建站公司有哪家招聘的,松江网站建设品划网络Playwright 文件操作#xff08;2025 年最新版#xff09;
Playwright 本身是浏览器自动化工具#xff0c;主要在浏览器环境中运行#xff0c;但它提供了便捷的 API 来处理文件上传和文件下载。此外#xff0c;在 Node.js 环境中#xff0c;你可以结合 Node.js 的 fs 模…Playwright 文件操作2025 年最新版Playwright 本身是浏览器自动化工具主要在浏览器环境中运行但它提供了便捷的 API 来处理文件上传和文件下载。此外在 Node.js 环境中你可以结合 Node.js 的fs模块实现更复杂的本地文件读写操作。下面详细讲解常见文件操作场景。1.文件上传File Upload最常见的两种上传方式方式一直接设置 input[type“file”]推荐最稳定// tests/upload.spec.tsimport{test,expect}fromplaywright/test;importpathfrompath;test(单个文件上传,async({page}){awaitpage.goto(https://example.com/upload);// 准备本地文件路径相对项目根目录constfilePathpath.join(__dirname,../files/avatar.jpg);// 设置文件自动触发 change 事件awaitpage.getByLabel(上传头像).setInputFiles(filePath);// 验证上传成功awaitexpect(page.getByText(上传成功)).toBeVisible();});方式二上传多个文件awaitpage.getByLabel(批量上传).setInputFiles([path.join(__dirname,../files/file1.pdf),path.join(__dirname,../files/file2.png),]);方式三清空已选择的文件awaitpage.getByLabel(上传文件).setInputFiles([]);// 清空方式四拖拽上传模拟 Drag Drop// 创建 DataTransfer 对象模拟拖拽awaitpage.evaluate(async({filePath}){constinputdocument.querySelector(input[typefile])asHTMLInputElement;constfileawaitfetch(filePath).then(rr.blob()).then(bnewFile([b],test.jpg));constdtnewDataTransfer();dt.items.add(file);input.filesdt.files;input.dispatchEvent(newEvent(change,{bubbles:true}));},{filePath:http://example.com/test.jpg});// 或本地路径需特殊处理2.文件下载File Downloadtest(文件下载并验证,async({page}){// 监听下载事件const[download]awaitPromise.all([page.waitForEvent(download),// 等待下载开始page.getByRole(link,{name:下载报告}).click(),]);// 获取下载对象console.log(文件名:,download.suggestedFilename());// e.g., report.pdf// 保存到指定路径推荐constdownloadPathpath.join(__dirname,../downloads);awaitdownload.saveAs(path.join(downloadPath,download.suggestedFilename()));// 或获取临时路径headless 模式下有效consttempPathawaitdownload.path();// 验证文件存在结合 Node.js fsconstfsrequire(fs);expect(fs.existsSync(tempPath)).toBeTruthy();// 可选取消下载// await download.cancel();});注意在 headless 模式下下载的文件保存在临时目录download.path()可用。在 headed 模式下默认弹出系统保存对话框download.path()会返回 null。建议测试时统一使用 headless。3.结合 Node.js fs 进行本地文件操作Playwright 测试运行在 Node.js 环境中可以自由使用fs模块读写文件常用于准备测试数据验证下载文件内容生成临时文件importfsfromfs;importpathfrompath;test(验证下载文件内容,async({page}){// ...触发下载代码同上constsavedPathpath.join(__dirname,../downloads/report.pdf);awaitdownload.saveAs(savedPath);// 读取文件内容验证constbufferfs.readFileSync(savedPath);expect(buffer.length).toBeGreaterThan(1000);// 大于 1KB// 或验证文件类型PDF 开头 %PDFexpect(buffer.toString(utf8,0,5)).toBe(%PDF-);// 测试后清理fs.unlinkSync(savedPath);});4.playwright.config.ts 中配置下载路径可选import{defineConfig}fromplaywright/test;exportdefaultdefineConfig({use:{// 统一设置下载目录downloadsPath:downloads,},});然后download.path()会直接返回该目录下的路径。5.Python 版文件操作示例fromplaywright.sync_apiimportsync_playwrightimportoswithsync_playwright()asp:browserp.chromium.launch(headlessTrue)pagebrowser.new_page()page.goto(https://example.com/upload)# 上传page.get_by_label(选择文件).set_input_files(tests/files/test.pdf)# 下载withpage.expect_download()asdownload_info:page.get_by_text(下载).click()downloaddownload_info.value download.save_as(downloads/myfile.pdf)# 验证文件大小assertos.path.getsize(downloads/myfile.pdf)1000browser.close()最佳实践总结上传优先用setInputFiles() 绝对路径path.join(__dirname, ...)。下载始终用page.waitForEvent(download)saveAs()保存到自定义目录便于验证。文件路径使用path.join()避免跨平台问题。清理测试结束后删除临时文件保持环境干净。CI/CD确保下载目录有写权限。这些操作能让你轻松处理文件相关的测试场景如表单上传、报告导出。如果需要完整示例项目或处理压缩文件/大文件下载的进阶技巧随时告诉我