Cypress 12.10.0多次执行时自定义截图目录失效问题求助
问题修复方案
核心问题
你在cypress.run()中直接将screenshotsFolder作为顶级参数传入,但Cypress的API要求这类路径配置必须放在config对象内部,否则会被忽略并 fallback 到默认路径。另外异步创建文件夹的逻辑可能导致Cypress启动时目标路径还未生成。
修复步骤及代码修改
- 将
screenshotsFolder、videosFolder移到config对象中,符合Cypress API规范 - 使用同步方式创建文件夹,确保Cypress运行前目标路径已存在
- 统一用
path.join处理所有路径,避免跨平台格式冲突
修改后的完整代码:
const cypress = require('cypress'); const fs = require('fs'); const path = require('node:path'); //Function that create the test run var createRunTest = async function (info, folderNameResults){ //Datetime will be modified every time that the function is called var datetime2 = new Date(); //test start date datetime2 = datetime2.toISOString().slice(0, 19).replace('T', '_'); datetime2 = datetime2.replace(/:/g, '_'); //Creation datetime folder in reports (time it runs) var reportsFolder = path.join(__dirname, 'cypress', 'reports', folderNameResults, `${info.execution_num}_${datetime2}`); //同步创建文件夹,自动递归生成父目录 try { fs.mkdirSync(reportsFolder, { recursive: true }); } catch (err) { if (err.code !== 'EEXIST') console.error(err); } //Creation datetime folder in screenshots (time it runs) var screenshotsFolder = path.join(__dirname, 'cypress', 'screenshots', folderNameResults, `${info.execution_num}_${datetime2}`); try { fs.mkdirSync(screenshotsFolder, { recursive: true }); } catch (err) { if (err.code !== 'EEXIST') console.error(err); } console.log("It should be: ", screenshotsFolder); let results = await cypress.run({ browser: 'chrome', configFile: path.join(__dirname, 'cypress.config.js'), spec: path.join(__dirname, 'cypress', 'e2e', 'investigation', 'testWeb.cy.js'), reporter: "cypress-multi-reporters", reporterOptions: { "reporterEnabled": "mochawesome", "mochawesomeReporterOptions": { "reportDir": path.join(reportsFolder, "json"), "overwrite": false, "html": false, "json": true } }, // 关键修改:路径配置嵌套在config对象内 config: { videosFolder: path.join(__dirname, 'cypress', 'videos'), screenshotsFolder: screenshotsFolder, } }); console.log("Now it is: ", results.config.screenshotsFolder); info.execution_num += 1; return; } //Execution info var info = { id: 1, created: new Date().toISOString().slice(0, 10), execution_num: 0, } var folderNameResults = `${info.id}_${info.created}`; //自动创建外层结果目录 try { fs.mkdirSync(path.join(__dirname, 'cypress', 'reports', folderNameResults), { recursive: true }); fs.mkdirSync(path.join(__dirname, 'cypress', 'screenshots', folderNameResults), { recursive: true }); } catch (err) { if (err.code !== 'EEXIST') console.error(err); } //Execute test runs console.log("FIRST EXECUTION"); createRunTest(info, folderNameResults).then( () => { console.log("SECOND EXECUTION"); createRunTest(info, folderNameResults); });
关键修改说明
- 配置嵌套:将路径配置放入
config对象,这是Cypress识别自定义路径的正确方式 - 同步文件夹创建:
fs.mkdirSync配合recursive: true,既保证路径存在,又自动生成所有父级目录,简化代码逻辑 - 统一路径拼接:所有路径使用
path.join处理,避免Windows与Linux的斜杠格式冲突
内容的提问来源于stack exchange,提问作者Gharned
相关产品推荐
相关产品推荐

