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

Cypress写入JSON文件旧数据被覆盖的解决方法咨询

解决Cypress中cy.writeFile覆盖JSON旧数据的问题

问题出在cy.writeFile默认是覆盖写入模式,每次调用都会替换文件原有内容。要实现追加/合并数据,得先读取旧文件内容,合并新数据后再写入。

另外你原来的代码有个明显问题:直接往opt_task(Cypress返回的DOM元素集合对象)里push数据是错误的,这会污染DOM对象,应该单独维护业务数据数组。

修正后的完整代码

cy.get('.form').find('.row').eq(20).find('.ng-untouched').then($optTask => {
  // 提取要保存的新数据
  let newTask = {};
  if ($optTask[0].innerText) {
    newTask = { opt_task_description: $optTask[0].innerText };
  } else if ($optTask[0].value) {
    newTask = { opt_task_description: $optTask[0].value };
  }

  // 读取现有JSON文件,文件不存在时返回空数组
  cy.readFile(task_json, { log: false }).then(existingTasks => {
    // 确保读取到的内容是数组(首次写入时文件不存在,会返回undefined)
    const updatedTasks = Array.isArray(existingTasks) ? existingTasks : [];
    // 追加新数据到数组
    updatedTasks.push(newTask);
    // 写入合并后的数据
    cy.writeFile(task_json, updatedTasks);
  });
});

关键要点

  • 先读再写:通过cy.readFile获取文件已有的数据,避免直接覆盖
  • 处理空文件/首次写入:判断读取结果是否为数组,不是的话初始化为空数组,防止报错
  • 分离DOM对象和数据:不要修改Cypress返回的DOM元素集合,单独存储要保存的业务数据

如果你的场景是要合并对象(比如更新已有条目而非追加新条目),可以在读取旧数据后,通过遍历找到对应条目进行更新,再写入文件。

内容的提问来源于stack exchange,提问作者Dave Han

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:05:24