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

Cypress自定义命令调用MyCompanyAPI无法返回预期值求助

解决Cypress自定义命令调用MyCompanyAPI.API.Fields.getById返回undefined的问题

首先修正代码里的核心错误

你的两段代码都存在变量名不匹配的低级问题,这是导致返回undefined的直接原因:

  1. 第一段命令中,你定义了const myCompanyAPI = win.MyCompanyAPI,但判断条件却写了if (!hybridForms)——hybridForms是未定义的变量,会直接触发错误分支返回undefined。
  2. 第二段调试命令中,你错误地访问win.HybridForms,但你明确确认存在的是win.MyCompanyAPI,变量名完全不匹配,自然无法获取正确对象。

修正后的可用自定义命令

Cypress.Commands.add('getValue', (id) => {
  cy.window().then((win) => {
    const myCompanyAPI = win.MyCompanyAPI;
    if (!myCompanyAPI) {
      cy.log('MyCompanyAPI object not found in window.');
      return cy.wrap(undefined);
    }

    // 使用可选链避免深层访问报错
    const fields = myCompanyAPI.API?.Fields;
    if (!fields) {
      cy.log('Fields API not found in MyCompanyAPI.');
      return cy.wrap(undefined);
    }

    // 验证getById是否为可调用方法
    if (typeof fields.getById !== 'function') {
      cy.log('getById method is not available on Fields.');
      return cy.wrap(undefined);
    }

    // 调用方法并提取value
    const fieldResult = fields.getById(id);
    const value = fieldResult?.value;
    
    cy.log(`Value for ${id}:`, value);
    if (value === undefined) {
      cy.log(`Field with id ${id} returned undefined value.`);
    }

    return cy.wrap(value);
  });
});

若仍返回undefined的额外排查方向

  1. 方法上下文问题:部分类方法需要绑定正确的this才能工作,尝试修改调用方式:
    const fieldResult = fields.getById.call(fields, id);
    
  2. 异步方法处理:如果getById返回Promise,需要用异步逻辑处理:
    return fields.getById(id).then(fieldResult => {
      const value = fieldResult?.value;
      cy.log(`Value for ${id}:`, value);
      return cy.wrap(value);
    });
    
  3. 元素初始化时机:确保调用命令时,MyCompanyAPI已完成初始化、目标元素已注册到API中,可提前添加等待逻辑:
    cy.window()
      .should('have.property', 'MyCompanyAPI')
      .its('API.Fields').should('exist')
      .then(fields => {
        cy.wrap(fields).invoke('getById', 'main').should('exist');
      });
    cy.getValue('main');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:17