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

如何在cypress-file-upload中配置attachFile支持从downloads目录上传文件

报错原因

cypress-file-upload的attachFile方法默认会把传入的相对路径自动拼接Cypress的fixtures目录(默认路径为cypress/fixtures)作为最终寻址路径,因此你传入的downloads/img.png会被解析为cypress/fixtures/downloads/img.png,导致找不到目标文件。

解决方案

方案1:无需修改配置,先读文件再上传(推荐)

通过cy.readFile直接读取downloads目录的文件,再将文件内容传入attachFile即可,使用Cypress.config('downloadsFolder')可以直接获取Cypress的下载目录路径,适配自定义下载路径的场景:

cy.readFile(`${Cypress.config('downloadsFolder')}/img.png`, 'base64')
  .then(fileContent => {
    cy.get('[data-cy="dropzone"]').attachFile(
      {
        fileContent,
        fileName: 'img.png',
        mimeType: 'image/png'
      },
      { subjectType: 'drag-n-drop' }
    )
  })

如果上传的是其他格式文件,只需对应修改mimeType参数即可,比如CSV文件用text/csv、PDF文件用application/pdf。

方案2:全局配置fixtures搜索路径(适合频繁从downloads上传的场景)

你可以在cypress.config.js(旧版Cypress对应cypress.json)中修改fixtures目录配置,将项目根目录设为fixtures搜索根路径,之后传入相对项目根目录的路径即可寻址到downloads目录:

// cypress.config.js 配置示例
const { defineConfig } = require('cypress')

module.exports = defineConfig({
  fixturesFolder: '.', // 将fixtures根路径设为项目根目录
  // 其余原有配置保持不变
})

配置修改后,你的原有代码只需调整路径即可正常运行:

cy.get('[data-cy="dropzone"]')
  .attachFile('cypress/downloads/img.png', {subjectType: 'drag-n-drop' });

注意:该方案会修改fixtures的全局寻址规则,原有fixtures目录下的文件引用需要同步调整为cypress/fixtures/xxx的路径格式。

内容的提问来源于stack exchange,提问作者JohnPix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:03