如何在Cypress中列出下载目录内容?需检测含未知命名部分的文件
在Cypress中验证含动态部分的下载文件存在
当下载文件名包含动态变化的部分(比如示例中的Bestellschein-xy.pdf里的xy每次不同),无法直接用固定路径验证时,可以通过以下步骤实现:
1. 注册Node端任务读取下载目录
Cypress浏览器端无法直接访问本地文件系统,需要在cypress.config.js中注册一个Node任务,用来读取下载目录并过滤符合命名模式的文件:
// cypress.config.js const { defineConfig } = require('cypress'); const fs = require('fs'); const path = require('path'); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { on('task', { getMatchingDownloads: () => { const downloadsDir = path.join(__dirname, 'cypress', 'downloads'); // 过滤出以Bestellschein-开头、.pdf结尾的文件 return fs.readdirSync(downloadsDir).filter(file => file.startsWith('Bestellschein-') && file.endsWith('.pdf') ); } }); }, }, });
如果需要更灵活的匹配(比如允许中间任意字符),可以改用正则表达式:
filter(file => /^Bestellschein-.+\.pdf$/.test(file))
2. 在测试用例中验证文件
调用注册好的任务,获取匹配的文件列表,再对文件进行存在性和大小验证:
cy.task('getMatchingDownloads').then(matchingFiles => { // 确认至少有一个符合条件的文件存在 expect(matchingFiles).to.have.length.greaterThan(0); // 取第一个匹配的文件进行后续验证 const targetFile = `cypress/downloads/${matchingFiles[0]}`; cy.readFile(targetFile, 'binary', { timeout: 15000 }) .should('exist') .should(buffer => expect(buffer.length).to.be.gt(61060)); });
注意事项
- 确保下载目录路径正确,若使用自定义下载路径,需调整
downloadsDir的取值 - 调整
timeout参数适配文件下载时长,避免因文件未完全下载导致验证失败
内容的提问来源于stack exchange,提问作者Michael S.
相关产品推荐
相关产品推荐

