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

Cypress 12.10.0多次执行时自定义截图目录失效问题求助

问题修复方案

核心问题

你在cypress.run()中直接将screenshotsFolder作为顶级参数传入,但Cypress的API要求这类路径配置必须放在config对象内部,否则会被忽略并 fallback 到默认路径。另外异步创建文件夹的逻辑可能导致Cypress启动时目标路径还未生成。

修复步骤及代码修改

  1. 将screenshotsFolder、videosFolder移到config对象中,符合Cypress API规范
  2. 使用同步方式创建文件夹,确保Cypress运行前目标路径已存在
  3. 统一用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:57:15