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

Cypress调用attachFile上传PDF提交后文件消失提示需上传文件

问题原因

你这段Cypress上传代码有两个致命错误,直接导致上传校验失败:

  • 错误1:错误转换二进制文件内容。PDF是二进制格式文件,你写的fileContent.toString()会把二进制内容转成UTF-8字符串,直接破坏PDF的原始文件结构,前端/后端校验读取文件时,根本识别不到合法的PDF文件标识,直接判定为无效文件。
  • 错误2:MIME类型配置错误。PDF文件的标准MIME类型是application/pdf,你代码里写的text/pdf是无效类型,大部分上传组件会在提交时先校验文件MIME类型,类型不匹配直接拦截抛出"请上传PDF文件"的错误。

另外你写的cy.wait(10000)硬等待固定时长的写法非常不稳定,容易因为页面加载时序波动导致元素还没就绪就执行上传操作。

修复方案

直接替换成以下代码即可:

// 等待上传控件就绪,替代固定时长等待
cy.get('#Shipment_PaperlessFile').should('be.visible')
// 读取fixture时传入null作为编码参数,保留PDF原始二进制内容,不做转码
cy.fixture('pdf1.pdf', null).then(fileContent => {
  cy.get('#Shipment_PaperlessFile').attachFile({
    fileContent: fileContent,
    fileName: 'pdf1.pdf',
    mimeType: 'application/pdf' // 使用PDF标准MIME类型
  })
})

// 可选:增加上传结果校验,避免时序问题
cy.get('#Shipment_PaperlessFile')
  .should('have.prop', 'files')
  .its(0.name)
  .should('eq', 'pdf1.pdf')
补充排错点

如果替换代码后仍上传失败,按以下点排查:

  • 确认attachFile绑定的是页面实际接收文件的原生<input type="file">元素,不是前端渲染的样式上传按钮,很多组件会把原生input设为透明覆盖在样式按钮上,选错元素会导致文件挂载无效
  • 所有二进制格式文件(PDF、图片、压缩包、Office文档等)读取fixture时都不要调用toString()转字符串,必须保留原始二进制内容
  • 如果组件做了文件大小校验,确认你放在fixtures里的pdf1.pdf大小符合组件限制要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:54:33