javascript - 链接可以在 Cypress 中抽象出来吗?

标签 javascript cypress code-duplication chain

我正在用 cypress 编写一个 UI 断言测试,我看到了很多重复的链接。有没有一种方法可以将其抽象为辅助方法,以便于维护(并减少代码重复)?

示例代码:

it('displays the table column headers', () => {
      DivisionPage.divisionNameColumnHeader()
        .should('be.visible')
        .and('have.css', 'text-transform', 'capitalize')
        .and('have.css', 'color', 'rgb(35, 40, 43)')
        .and('have.css', 'background-color', 'rgb(195, 202, 206)')
        .and('have.css', 'cursor', 'pointer')
        .and('have.css', 'font-family', '"Open Sans"')
        .and('have.css', 'position', 'sticky')
      DivisionPage.teamsColumnHeader()
        .should('be.visible')
        .and('have.css', 'text-transform', 'capitalize')
        .and('have.css', 'color', 'rgb(35, 40, 43)')
        .and('have.css', 'background-color', 'rgb(212, 217, 220)')
        .and('have.css', 'cursor', 'pointer')
        .and('have.css', 'font-family', '"Open Sans"')
        .and('have.css', 'position', 'sticky')
      DivisionPage.playersColumnHeader()
        .should('be.visible')
        .and('have.css', 'text-transform', 'capitalize')
        .and('have.css', 'color', 'rgb(35, 40, 43)')
        .and('have.css', 'background-color', 'rgb(212, 217, 220)')
        .and('have.css', 'cursor', 'pointer')
        .and('have.css', 'font-family', '"Open Sans"')
        .and('have.css', 'position', 'sticky')
})

请注意,我使用的是页面模型,因此 DivisionPage.divisionNameColumnHeader() 等于如下所示:cy.get('[data-cy="division-name-column -header"]')

最佳答案

一个函数或方法是可行的,但是一个Custom Command更好,因为您的重复代码是 Cypress 断言。

如果您在 /support/commands.js 中定义这些命令,那么这些命令对于所有测试都是全局的。

Cypress.Commands.add('isStickyVisibleAndCapitalizedInCorporateColors',
  {prevSubject:true},
  (subject) => {
    cy.wrap(subject)
      .should('be.visible')
      .and('have.css', 'text-transform', 'capitalize')
      .and('have.css', 'color', 'rgb(35, 40, 43)')
      .and('have.css', 'background-color', 'rgb(212, 217, 220)')
      .and('have.css', 'cursor', 'pointer')
      .and('have.css', 'font-family', 'Open Sans')
      .and('have.css', 'position', 'sticky')
})

// Used like a composite assertion
DivisionPage.divisionNameColumnHeader().isStickyVisibleAndCapitalizedInCorporateColors()


或者一次选择所有元素并迭代集合

it('displays the table column headers', () => {

  cy.get('[data-cy="division-name-column-header"], [data-cy="division-teams-column-header"], [data-cy="division-players-column-header"]')
    .each($el => {
      cy.wrap($el)
        .should('be.visible')
        .and('have.css', 'text-transform', 'capitalize')
        .and('have.css', 'color', 'rgb(35, 40, 43)')
        .and('have.css', 'background-color', 'rgb(195, 202, 206)')
        .and('have.css', 'cursor', 'pointer')
        .and('have.css', 'font-family', '"Open Sans"')
        .and('have.css', 'position', 'sticky')
    })
})

关于javascript - 链接可以在 Cypress 中抽象出来吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73832805/

相关文章:

javascript - 在没有浏览器检测的情况下为不同的浏览器提供不同的 css 框阴影?

javascript - Firebase 初始代码

jenkins - 在 Jenkins 中运行 Cypress 测试时出现跨源错误

jsp - 避免 JSP 中的代码重复

javascript - Rails 在 View 之间共享 javascript

javascript - 为什么我的边栏媒体查询不能在 Javascript 中运行?

javascript - WebSockets : Make javascript wait until server responds

javascript - Cypress - 如何等待两个元素中的第二个出现?

cypress - 如何在 Cypress 中查询 HTML 标签值?

java - 使用一个来源的两个 GUI