Cypress自定义data-qa-id命令链式调用失败,原生写法正常
Cypress自定义命令链式调用报错“subject received was undefined”的解决办法
问题核心:你封装的
getByDataQAId和findByDataQAId自定义命令没有返回Cypress查询的结果,导致链式调用时上下文(元素主体)丢失,后续命令无法获取有效subject。错误的自定义命令写法(你大概率是这么写的):
Cypress.Commands.add('getByDataQAId', (id) => { cy.get(`[data-qa-id="${id}"]`) }) Cypress.Commands.add('findByDataQAId', (id) => { cy.find(`[data-qa-id="${id}"]`) })
这种写法里,自定义命令没有返回cy.get()/cy.find()生成的Chainable对象,链式调用的上下文在这里断裂,后续filter()和findByDataQAId()拿到的subject就是undefined,从而触发报错。
- 正确的自定义命令写法:必须return查询结果,保持链式上下文传递
Cypress.Commands.add('getByDataQAId', (id) => { return cy.get(`[data-qa-id="${id}"]`) }) Cypress.Commands.add('findByDataQAId', (id) => { return cy.find(`[data-qa-id="${id}"]`) })
验证:修改后,原调用代码
cy.getByDataQAId('card-detail').filter(':visible').findByDataQAId('sub-title')就能和原生写法一样正常定位元素。补充:Cypress的链式调用完全依赖命令返回的Chainable对象,原生
cy.get()和cy.find()本身会自动返回这个对象,所以原生写法能正常工作;而自定义命令必须显式return,才能维持上下文传递。
内容的提问来源于stack exchange,提问作者James Dudley
相关产品推荐
相关产品推荐

