Cypress新增自定义命令调用时报方法不是函数错误排查
报错原因
这个报错的核心原因是自定义命令注册时的名称和调用时的名称不匹配:你在Cypress.Commands.add()里传入的第一个参数是"applyandSaveButtonsAreDisabled "——注意字符串末尾多了一个多余的尾随空格,实际注册到Cypress实例上的命令名带了这个空格,但你调用时写的是cy.applyandSaveButtonsAreDisabled(),名称完全对不上,Cypress找不到对应方法就会抛出"not a function"的错误。
关于是否需要在测试文件额外引用命令文件:
- 常规场景不需要。Cypress默认会在所有测试运行前自动加载
cypress/support/目录下的支持文件,只要你把自定义命令写在默认的cypress/support/commands.js(TS项目为commands.ts)中,且cypress/support/e2e.js(Cypress旧版本对应文件为cypress/support/index.js)里保留了项目初始化时默认自带的import './commands'语句,所有测试文件都可以直接调用注册好的自定义命令,不需要单独在测试文件里加引用。 - 如果你把自定义命令拆分写在了support目录外的其他路径,只需要在
e2e.js这个统一入口文件里引入对应命令文件即可,依然不需要在单个测试用例文件中引用。
修复方法
- 删除自定义命令定义里命令名末尾的多余空格,修改后的注册代码如下:
Cypress.Commands.add("applyandSaveButtonsAreDisabled", () => { cy.get("[data-a-key=base-modal-button-Save]").should("be.disabled"); cy.get("[data-a-key=base-modal-button-Apply]").should("be.disabled"); });
- 确认
cypress/support/e2e.js中存在引入commands文件的语句,没有的话补上即可:
import './commands'
- 完全重启Cypress测试运行器(修改support目录下的文件后一般需要重启才能生效),之后再调用
cy.applyandSaveButtonsAreDisabled()就能正常运行了。
内容的提问来源于stack exchange,提问作者amiel
相关产品推荐
相关产品推荐

