Protractor/TypeScript如何校验带动态时间戳的CSV下载文件及内容
动态校验下载的时间戳命名CSV文件方案
问题场景
点击导出按钮后,文件会下载到Download文件夹,下载的文件名格式为abc.当前时间戳.csv。目前已实现点击按钮触发下载的自动化逻辑,但在验证文件是否下载成功时遇到问题:每次下载的文件时间戳均不相同,若在existsSync方法中硬编码文件名可以正常校验,但该实现方式不符合规范。需要将脚本改为动态逻辑,能够读取最新下载的文件,同时校验文件为.csv格式并验证其内容。
现有代码示例
未实现的动态逻辑草稿
browser.driver.wait(function(){ return fs.existsSync(filename.timestamp.csv); },3000).then(function(){ console.log('File Exists!') });
不符合规范的硬编码实现
browser.driver.wait(function(){ return fs.existsSync("C:\\users\\download\\abc.2021-16-6_160045.csv"); },3000).then(function(){ console.log('File Exists!') });
实现思路
- 先指定下载目录路径,读取该目录下的所有文件列表
- 用正则匹配筛选出文件名符合
abc.xxx.csv格式的文件 - 将匹配到的文件按最后修改时间降序排序,取第一个即为最新下载的文件
- 校验文件后缀为
.csv,后续可扩展读取文件内容做正确性校验
最终实现代码
const downloadPath = "C:\\users\\download\\"; // 可根据实际时间戳格式调整正则匹配规则 const fileNameRegex = /^abc\.\d{4}-\d{1,2}-\d{1,2}_\d+\.csv$/; browser.driver.wait(function() { // 读取下载目录下所有文件 const files = fs.readdirSync(downloadPath); // 筛选匹配命名规则的文件 const matchedFiles = files.filter(file => fileNameRegex.test(file)) .map(file => ({ name: file, mtime: fs.statSync(downloadPath + file).mtime.getTime() })) // 按修改时间倒序,最新的排在最前 .sort((a, b) => b.mtime - a.mtime); if (matchedFiles.length > 0) { const latestFile = matchedFiles[0]; // 此处可扩展新增读取文件内容的校验逻辑 return latestFile.name.endsWith('.csv'); } return false; }, 3000).then(function() { console.log('最新CSV文件下载成功!'); });
内容的提问来源于stack exchange,提问作者Swapnil G
相关产品推荐
相关产品推荐

