5月29日 00:23

Cypress 自定义命令怎么创建和复用?

通过 Cypress.Commands.add()cypress/support/commands.js 中注册自定义命令,将重复操作封装为可链式调用的 cy.xxx() 方法。自定义命令返回 cy 对象,与内置命令行为一致,支持重试和超时机制。定义时注意命名唯一、避免与内置命令冲突,复杂逻辑优先用普通工具函数而非自定义命令。

追问

Cypress.Commands.add() 的第二个参数支持哪些选项? 可传入配置对象 { prevSubject: 'element' } 使命令接收前一个命令的 subject,实现类似 cy.get('input').myCommand() 的链式用法。prevSubject 可选 'optional'、'required'、'noop' 等。

自定义命令和普通工具函数怎么选? 需要重试、超时、命令日志或链式调用时用自定义命令;纯数据处理、复杂条件逻辑用普通函数。过度使用自定义命令会导致命令日志噪音和调试困难。

如何覆盖已有命令?Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) 扩展内置命令行为,如自动添加认证 header。慎用,会全局影响。

自定义命令中如何正确处理异步? 命令内部必须使用 Cypress 命令(cy.get、cy.request 等)而非原生 Promise,否则无法重试。如需返回值,用 .then() 提取。

写段代码

javascript
// cypress/support/commands.js Cypress.Commands.add('login', (email, password) => { cy.session([email, password], () => { cy.request('POST', '/api/login', { email, password }); }); }); // 测试中使用 cy.login('user@test.com', 'pass123');
标签:Cypress