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

如何在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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:55:26