Cypress自定义命令调用MyCompanyAPI无法返回预期值求助
解决Cypress自定义命令调用
MyCompanyAPI.API.Fields.getById返回undefined的问题 首先修正代码里的核心错误
你的两段代码都存在变量名不匹配的低级问题,这是导致返回undefined的直接原因:
- 第一段命令中,你定义了
const myCompanyAPI = win.MyCompanyAPI,但判断条件却写了if (!hybridForms)——hybridForms是未定义的变量,会直接触发错误分支返回undefined。 - 第二段调试命令中,你错误地访问
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的额外排查方向
- 方法上下文问题:部分类方法需要绑定正确的
this才能工作,尝试修改调用方式:const fieldResult = fields.getById.call(fields, id); - 异步方法处理:如果
getById返回Promise,需要用异步逻辑处理:return fields.getById(id).then(fieldResult => { const value = fieldResult?.value; cy.log(`Value for ${id}:`, value); return cy.wrap(value); }); - 元素初始化时机:确保调用命令时,
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
相关产品推荐
相关产品推荐

