Javascript 自定义Cypress click()命令以始终返回单击({force:true})

Javascript 自定义Cypress click()命令以始终返回单击({force:true}),javascript,automation,command,click,cypress,Javascript,Automation,Command,Click,Cypress,在我的大多数规范中,我最终将{force:true}传递给click()命令。 传递强制变得很痛苦:成百上千的click()命令都是如此 一个更好的一次性永久解决方案是编写一个定制的Cypress命令来始终单击({force:true}) 我是这样做的 // cypress/support/index.js Cypress.Commands.add('forceClick', { prevSubject: 'element' }, element => { return cy.wra

在我的大多数规范中,我最终将
{force:true}
传递给
click()
命令。 传递强制变得很痛苦:成百上千的click()命令都是如此

一个更好的一次性永久解决方案是编写一个定制的Cypress命令来始终
单击({force:true})

我是这样做的

// cypress/support/index.js

Cypress.Commands.add('forceClick', { prevSubject: 'element' }, element => {
  return cy.wrap(element).click({ force: true })
})
上述命令不可链接。 要使上述命令可链接,请将此命令添加到
Cypress/support/index.d.ts中的全局Cypress可链接界面中

// in cypress/support/index.d.ts
// load type definitions that come with Cypress module
/// <reference types="cypress" />

declare namespace Cypress {
  interface Chainable {
    /**
     * Custom command to force click an element.
     * @example cy.get('[data-test="Login"]').forceClick()
     */
    forceClick(): Chainable<Element>
  }
}
//在cypress/support/index.d.ts中
//Cypress模块附带的加载类型定义
/// 
声明命名空间Cypress{
可链接接口{
/**
*用于强制单击图元的自定义命令。
*@example cy.get('[data test=“Login”]')。forceClick()
*/
forceClick():可链接
}
}

强制每次单击都是懒惰的测试。有关您的测试将不再执行的操作的列表,请参阅。@SteveZodiac不完全如此。通过将
{force:false}
传递到
click()
,您仍然可以选择不强制单击。在您的懒惰世界中可能是懒惰的测试。在我的世界里,它被称为智能测试,在我的实践中节省了大量的时间和打字效率——重写命令在三个方面是危险的:1。由于您不是该命令的作者,因此您不知道可能的副作用。2.如果您在一个团队中工作,并且/或者其他人需要在相同的设置下编写测试-他们将不知道您更改了默认行为,并且将遇到问题3。例如,在您的情况下:自动设置“{force:true}”将绕过可见性/存在性检查,并将使e2e测试变得更加脆弱和不可解。我的建议是创建一个单独的命令,如
cy.clickForceTrue()
,这样您就可以选择了。