使用wdio执行测试时无法将截图上传至Report Portal问题求助
WebdriverIO 截图无法上传Report Portal问题解决方案
你遇到的报错核心是相对路径基准不一致和字符串拼接路径导致的格式错误,结合代码逻辑和日志可以确定三个核心问题:
- 日志中出现路径
./e2e/report/screenshot//should_allow_us_fail.png,说明字符串拼接路径时出现了冗余双斜杠,部分文件系统对双斜杠兼容差会导致文件找不到 - 相对路径
./e2e/report/screenshot/的基准是执行测试命令时的工作目录,如果执行命令时的目录和wdio.config.js所在目录不一致,就会出现目录/文件找不到的问题 - 额外冗余IO操作:写完截图到磁盘再读出来,既增加IO耗时也容易触发读写时序问题
方案1:直接复用截图Buffer(最优)
WebdriverIO的browser.saveScreenshot()方法如果不传路径参数,会直接返回截图的Buffer数据,完全不需要写磁盘再读取,从根源避免文件读写错误,代码修改如下:
const path = require('path'); const fs = require('fs'); static takeScreenshot(name, failure = false, test) { // 处理文件名 let fileName = failure ? `${name}_fail` : name; fileName = fileName.replace(/ /g, '_') + '.png'; // 直接获取截图Buffer,无需先写磁盘 const screenshotBuffer = browser.saveScreenshot(); // 如果需要保留本地截图给Allure使用,再写磁盘 const screenshotDir = path.resolve(__dirname, '../report/screenshot/'); if (!fs.existsSync(screenshotDir)) { fs.mkdirSync(screenshotDir, { recursive: true }); } const fullFilePath = path.join(screenshotDir, fileName); fs.writeFileSync(fullFilePath, screenshotBuffer); // 直接传Buffer给Report Portal,无需二次读磁盘 reporter.sendFileToTest(test, 'INFO', fileName, screenshotBuffer); }
方案2:仅修复路径问题
如果要保留原有写了再读的逻辑,只需要把硬编码的相对路径替换为绝对路径,用Node.js内置的path模块处理路径拼接即可:
const path = require('path'); static takeScreenshot(name, failure = false, test) { // 用__dirname生成绝对路径,避免工作目录变动导致的路径错误 const screenshotDir = path.resolve(__dirname, '../report/screenshot/'); let fileName = ''; if (!fs.existsSync(screenshotDir)) { fs.mkdirSync(screenshotDir, { recursive: true }); } if (failure) { fileName = name + '_fail'; } fileName = fileName.replace(/ /g, '_') + '.png'; // 用path.join处理路径拼接,自动规避冗余斜杠问题 const fullFilePath = path.join(screenshotDir, fileName); browser.saveScreenshot(fullFilePath); const data = fs.readFileSync(fullFilePath); reporter.sendFileToTest(test, 'INFO', fileName, data); }
额外配置校验
如果修改完代码还是无法上传,检查wdio.config.js里Report Portal reporter的配置:
- 确认已配置必填的
token、endpoint、project、launch参数 - 确认
wdio-reportportal-reporter和reportportal-client版本和你使用的WebdriverIO版本兼容 - 确认Report Portal服务端运行正常,网络可连通
内容的提问来源于stack exchange,提问作者ChanChow
相关产品推荐
相关产品推荐

