news 2026/8/8 7:10:01

Playwright 文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Playwright 文件操作

Playwright 文件操作(2025 年最新版)

Playwright 本身是浏览器自动化工具,主要在浏览器环境中运行,但它提供了便捷的 API 来处理文件上传文件下载。此外,在 Node.js 环境中,你可以结合 Node.js 的fs模块实现更复杂的本地文件读写操作。下面详细讲解常见文件操作场景。

1.文件上传(File Upload)

最常见的两种上传方式:

方式一:直接设置 input[type=“file”](推荐,最稳定)

// tests/upload.spec.tsimport{test,expect}from'@playwright/test';importpathfrom'path';test('单个文件上传',async({page})=>{awaitpage.goto('https://example.com/upload');// 准备本地文件路径(相对项目根目录)constfilePath=path.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})=>{constinput=document.querySelector('input[type="file"]')asHTMLInputElement;constfile=awaitfetch(filePath).then(r=>r.blob()).then(b=>newFile([b],'test.jpg'));constdt=newDataTransfer();dt.items.add(file);input.files=dt.files;input.dispatchEvent(newEvent('change',{bubbles:true}));},{filePath:'http://example.com/test.jpg'});// 或本地路径需特殊处理
2.文件下载(File Download)
test('文件下载并验证',async({page})=>{// 监听下载事件const[download]=awaitPromise.all([page.waitForEvent('download'),// 等待下载开始page.getByRole('link',{name:'下载报告'}).click(),]);// 获取下载对象console.log('文件名:',download.suggestedFilename());// e.g., report.pdf// 保存到指定路径(推荐)constdownloadPath=path.join(__dirname,'../downloads');awaitdownload.saveAs(path.join(downloadPath,download.suggestedFilename()));// 或获取临时路径(headless 模式下有效)consttempPath=awaitdownload.path();// 验证文件存在(结合 Node.js fs)constfs=require('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模块读写文件,常用于:

  • 准备测试数据
  • 验证下载文件内容
  • 生成临时文件
importfsfrom'fs';importpathfrom'path';test('验证下载文件内容',async({page})=>{// ...触发下载代码同上constsavedPath=path.join(__dirname,'../downloads/report.pdf');awaitdownload.saveAs(savedPath);// 读取文件内容验证constbuffer=fs.readFileSync(savedPath);expect(buffer.length).toBeGreaterThan(1000);// 大于 1KB// 或验证文件类型(PDF 开头 %PDF)expect(buffer.toString('utf8',0,5)).toBe('%PDF-');// 测试后清理fs.unlinkSync(savedPath);});
4.playwright.config.ts 中配置下载路径(可选)
import{defineConfig}from'@playwright/test';exportdefaultdefineConfig({use:{// 统一设置下载目录downloadsPath:'downloads',},});

然后download.path()会直接返回该目录下的路径。

5.Python 版文件操作示例
fromplaywright.sync_apiimportsync_playwrightimportoswithsync_playwright()asp:browser=p.chromium.launch(headless=True)page=browser.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()download=download_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:确保下载目录有写权限。

这些操作能让你轻松处理文件相关的测试场景(如表单上传、报告导出)。如果需要完整示例项目或处理压缩文件/大文件下载的进阶技巧,随时告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 22:19:06

ECharts 饼图(Pie Chart)教程

ECharts 饼图(Pie Chart)教程 ECharts 的饼图(series.type ‘pie’)主要用于展示数据在总体中的占比比例,支持实心饼图、圆环图(南丁格尔图/玫瑰图)、多层嵌套等变体。数据通过 data 数组中的…

作者头像 李华
网站建设 2026/8/7 15:52:35

Open-AutoGLM日志加密部署难题:90%团队忽略的2个致命风险点

第一章:Open-AutoGLM 日志数据加密存储在 Open-AutoGLM 系统中,日志数据的安全性至关重要。为防止敏感信息泄露,系统采用端到端加密机制对日志进行安全存储。所有日志在写入磁盘前均经过加密处理,确保即使存储介质被非法获取&…

作者头像 李华
网站建设 2026/8/7 16:10:17

精密机械工厂6个研发如何共享一台SolidWorks云工作站

在精密机械制造行业,产品研发效率与协同能力直接决定市场竞争力。当6名工程师需要共享SolidWorks云工作站时,可借助智能共享云桌面,通过以下综合方案实现共享一台SolidWorks云工作站的目标,该方案涵盖硬件配置、资源管理、软件部署…

作者头像 李华
网站建设 2026/8/7 16:03:08

Open-AutoGLM监控总失效?99%人忽略的3个配置陷阱

第一章:Open-AutoGLM异常访问监控配置在部署 Open-AutoGLM 服务时,保障系统安全与稳定性至关重要。异常访问监控是及时发现潜在攻击、滥用行为或系统故障的关键机制。通过合理配置日志采集、访问频率限制和行为分析规则,可有效识别并阻断异常…

作者头像 李华
网站建设 2026/8/7 22:57:54

LangFlow静态站点生成(SSG)可行性探讨

LangFlow静态站点生成(SSG)可行性探讨 在AI应用开发日益普及的今天,越来越多团队希望快速构建、展示并共享基于大语言模型的工作流。然而,传统的LangChain项目往往依赖复杂的代码结构和持续运行的服务端环境,使得非技术…

作者头像 李华
网站建设 2026/8/7 17:54:26

Linux 如何设置开机自启:全面指南!

在日常运维和开发中,我们经常希望某些程序或服务在系统启动时自动运行,比如 Web 服务、数据库、监控脚本、定时任务等。本文将详细介绍在 Linux 系统中设置开机自启的常见方法,适用于常见发行版如 CentOS、Ubuntu、Debian 等。 一、使用 syst…

作者头像 李华