如何解决Protractor上传文件时出现“Done, upload failed”错误
Protractor文件上传"Done, upload failed"报错解决方案
- 确认
input[type="file"]元素未被隐藏,可正常接收输入。很多场景下文件选择框会被UI层隐藏,直接调用sendKeys会触发输入异常,可先执行脚本修改元素可见性:
// 移除文件输入框的隐藏相关样式 browser.executeScript(` const fileInput = document.querySelector('input[type="file"]'); fileInput.style.display = 'block'; fileInput.style.opacity = 1; fileInput.style.visibility = 'visible'; `); // 再输入文件绝对路径 $('input[type="file"]').sendKeys(absolutePath);
- 校验拼接后的绝对路径准确性,可打印日志确认路径可正常访问目标文件,Windows环境注意路径分隔符转义问题:
var absolutePath = path.resolve(__dirname, fileToUpload); console.log('上传文件路径:', absolutePath); // 本地执行时优先校验该路径对应的文件是否存在、是否有可读权限
- 增加显式等待避免操作时序异常,输入路径后等待文件输入框回填完成,再触发上传按钮点击:
const EC = protractor.ExpectedConditions; // 最长等待5秒,确认文件路径已经填入输入框 browser.wait(EC.textToBePresentInElementValue($('input[type="file"]'), fileToUpload), 5000); element(by.buttonText('Upload')).click();
- 检查页面同步配置,若开启了
browser.ignoreSynchronization = true适配非Angular页面,需要在上传操作前额外等待页面资源完全加载,避免未加载完成的上传接口调用失败。 - 确认
./trial.txt本身符合上传规则,包括文件大小、格式、内容没有命中后端校验拦截逻辑。
内容的提问来源于stack exchange,提问作者Prema Shivarama
相关产品推荐
相关产品推荐

