如何在Cypress中覆盖主题选项命令



柏树说

选项仅支持在Cypress.Commands.add()中使用,而不支持Cypress.Commands.overwrite()

所以当我们覆盖一个命令时,我们不能改变主题行为,我们不能添加一个与核心命令(链接)同名的新命令。

如何创建具有自定义行为和可选主题的find命令.

(注意:我会取一个不同的名字,但我猜findget是最可读的,已经是柏树的一部分)

// this is just an example of a custom find
Cypress.Commands.overwrite('find', (originalFn, selector, options) => {
return cy.log('my custom find')
})
cy.get('body').find('div') // OK
cy.find('div')             // throws ERROR (I want this to be possible)

不确定你是否只是给出一个例子,但cy.find('div')(如果它是有效的语法)相当于cy.get('div'),因为get总是从<body>搜索。

find存在的全部原因是从不同的元素中搜索,这是.within()

的简写。
cy.get('my-parent-element').within(() => {
cy.get('my-child-element')
})
// is equivalent to
cy.get('my-parent-element').find('my-child-element')

一般情况下,如果你不使用typescript,你可以直接在options参数中添加新的属性,并在overwrite中访问它们。

如果使用typescript,则需要修改类型定义以包含新选项。

你是正确的,你不能提供options命令覆盖。

但是您可以用新的命令替换cy.find()

Cypress.Commands.add('find2', 
{ prevSubject: ['optional', 'window', 'document', 'element'] },
(subject, selector, options) => {
const originalFn = Cypress.Commands._commands.find.fn;
if (subject) {
return originalFn(subject, selector, options)
} else {
cy.get('body').then($body => {
return originalFn($body, selector, options)
})
}
})
cy.find = cy.find2
cy.get('div').find('p')   // ✅ 
cy.find('div')            // ✅ 

相关内容

  • 没有找到相关文章

最新更新