使用WebDriver IO上传10GB大文件失败问题求助
解决WebDriver IO上传大文件(10GB+)失败的问题
当前使用browser.uploadFile()的脚本在处理小文件时正常,但10GB及以上大文件上传失败,核心原因是uploadFile()会先将本地文件传输到Selenium服务器,大文件的传输过程容易触发超时、内存不足等问题。以下是针对性的解决办法:
1. 直接使用本地文件路径(本地测试环境优先)
如果你的Selenium服务器和测试脚本运行在同一机器,完全不需要通过browser.uploadFile()中转,直接传入本地文件路径即可。注意Windows路径需要转义(用双反斜杠或正斜杠):
const path = require('path'); // 修正路径转义问题,原脚本的单斜杠会被识别为转义字符 const localFilePath = path.resolve('C:\\Users\\Dev030126\\Downloads\\MediaFile\\V1.mp4'); $('.upload-data-file-input').setValue(localFilePath);
2. 调整Selenium服务器的资源配置(远程环境)
若必须使用远程Selenium节点,需要修改服务器启动参数和WebDriver IO配置,提升资源配额和超时时间:
- 启动Selenium服务器时增加JVM内存(根据实际硬件调整):
java -Xmx16G -jar selenium-server.jar standalone - 在WebDriver IO配置文件中延长超时时间:
exports.config = { // 其他已有配置 capabilities: [{ browserName: 'chrome', 'selenium:timeout': 3600000 // 设置为1小时,根据文件上传耗时调整 }] };
3. 直接调用后端上传API(最稳定方案)
如果自有应用提供了后端上传接口,跳过前端文件输入框,直接用HTTP请求工具上传文件,完全规避WebDriver的限制:
const axios = require('axios'); const fs = require('fs'); const fileStream = fs.createReadStream('C:\\Users\\Dev030126\\Downloads\\MediaFile\\V1.mp4'); axios.post('/api/your-upload-endpoint', fileStream, { headers: { 'Content-Type': 'video/mp4' }, maxContentLength: Infinity, maxBodyLength: Infinity }) .then(response => { console.log('上传成功:', response.data); }) .catch(error => { console.error('上传失败:', error); });
4. 检查并调整浏览器上传限制
部分浏览器对单文件上传有默认大小限制,可通过启动参数放宽限制(以Chrome为例):
exports.config = { capabilities: [{ browserName: 'chrome', 'goog:chromeOptions': { args: [ '--disable-web-security', '--allow-file-access-from-files' ] } }] };
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick
相关产品推荐
相关产品推荐

