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

Cypress运行时报cannot set property name仅getter错误如何解决

问题根因

你更换的目标测试站点前端代码将原生Error原型的name属性设置为了仅可读(只有getter没有setter),而Cypress运行时接管页面错误逻辑时会尝试修改Error实例的name属性,因此触发权限报错,和你编写的测试代码无关。

定位验证步骤

  • 手动打开浏览器访问你的测试URL,打开控制台执行Object.getOwnPropertyDescriptor(Error.prototype, 'name'),如果返回结果中writable为false,或者存在get方法但无对应set方法,即可确认根因。
  • 检查Cypress版本,12.x及以上版本的错误处理逻辑更容易触发该类兼容性问题。

解决方法

方案1(优先验证,修改成本最低)

在Cypress的support入口文件(通常为cypress/support/e2e.js)添加如下配置,既可以规避该报错,也不会影响正常测试逻辑:

// 阻止站点自身的未捕获异常导致测试中断
Cypress.on('uncaught:exception', (err, runnable) => {
  return false
})

// 兜底重写Error.prototype.name为可写,兼容Cypress内部逻辑
Object.defineProperty(Error.prototype, 'name', {
  writable: true,
  value: 'Error'
})

方案2(适用站点完全不可修改的场景)

在cypress.config.js中添加实验性配置,跳过对目标域名的Cypress前置脚本注入:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  e2e: {
    experimentalSkipDomainInjection: ['*.你的测试域名.com'] // 替换为实际测试站点的域名
  }
})

方案3

降级Cypress到10.x及以下版本,旧版本的错误处理逻辑没有修改Error属性的操作,不会触发该冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:57:03