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

Cypress跨域场景下cy.origin传递对象失效问题求助

解决Cypress cy.origin()传入页面对象模型实例报错的问题

问题根源

cy.origin()的args参数只能传递可序列化的JSON数据,而你传入的页面对象实例(new MyPageObject())包含类方法,这类内容无法被序列化,跨上下文后会丢失方法,导致调用getContinueButton()时触发报错。

解决方案

方案1:在cy.origin回调内部重新实例化页面对象

因为cy.origin的回调运行在新的浏览器上下文,需要在回调里重新导入类并创建实例:

cy.origin(dfBaseURL, () => {
  // 根据你的项目路径调整导入语句
  const MyPageObject = require('../pages/MyPageObject')
  const testObject = new MyPageObject()
  
  testObject.getContinueButton().click({ force: true })
})

方案2:传递序列化数据给页面对象(如果需要外部配置)

如果页面对象需要依赖外部数据,只传递可序列化的参数,在回调内初始化实例:

// 准备可序列化的配置数据
const pageConfig = { continueBtnSelector: '#continue-button' }

cy.origin(dfBaseURL, { args: pageConfig }, (config) => {
  const MyPageObject = require('../pages/MyPageObject')
  const testObject = new MyPageObject(config) // 用传入的配置初始化
  
  testObject.getContinueButton().click({ force: true })
})

关键注意点

  • cy.origin的回调和主测试上下文完全隔离,无法直接共享带方法的类实例
  • 必须在回调内部重新导入页面对象类,不能依赖外部上下文的导入
  • 仅能传递JSON支持的基础类型:字符串、数字、布尔值、普通数组/对象,函数、类实例、Symbol等不可序列化类型都不能传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:40:14