【问题标题】:Custom Cypress click() command to always return click({force: true})自定义赛普拉斯 click() 命令始终返回 click({force: true})
【发布时间】:2021-07-09 06:12:43
【问题描述】:

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

更好的一次性永久解决方案是编写自定义赛普拉斯命令以始终click({force: true})

这是我的做法

【问题讨论】:

  • 在我的实践中 - 覆盖命令在 3 种方面是危险的: 1. 由于您不是命令的作者 - 您不知道可能的副作用。 2. 如果您在团队中工作和/或其他人需要在相同的设置上编写测试 - 他们不会知道您更改了默认行为并会遇到问题 3. 以您的情况为例:自动设置 '{force:true }' 将绕过可见性/存在性检查,并使 e2e 测试更加不稳定和不可靠我的建议是创建一个单独的命令,例如 cy.clickForceTrue(),以便您可以选择。

标签: javascript automation command click cypress


【解决方案1】:
// cypress/support/index.js

Cypress.Commands.add('forceClick', { prevSubject: 'element' }, element => {
  return cy.wrap(element).click({ force: true })
})

上述命令不可链接。 要使上述命令可链接,请将此命令添加到您的 cypress/support/index.d.ts 中的全局赛普拉斯可链接接口

// 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>
  }
}

【讨论】:

  • 强制每次点击只是懒惰的测试。请参阅 docs 了解您的测试将不再执行的列表。
  • @SteveZodiac 不完全是。您仍然可以选择不通过将 {force: false} 传递给 click() 来强制点击。在你的懒惰世界中可能是懒惰的测试。在我的世界里,它被称为智能测试,可以节省大量时间和打字工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多