1

我在所有网页中都显示了一个小聊天图标。如何用赛普拉斯写字?

小聊天图标具有 Widget 类,应该在所有页面中都可以找到。

我可以在下面写这样的东西,但我想知道是否有任何其他方法可以摆脱重复should('have','Widget'),但此时我什至不确定使用should('have','Widget')是否是正确的做法,但它确实有效。

cy.get('.pageA').should('have.value', 'Widget')
cy.get('.pageB').should('have.value', 'Widget')
cy.get('.pageC').should('have.value', 'Widget')
cy.get('.pageD').should('have.value', 'Widget')

我正在使用 Cypress 和 Cucumber 预处理器。

4

3 回答 3

1

如果断言在单个测试中排列,您可以采用数据驱动的方法

['.pageA', '.pageB', '.pageC', '.pageD'].forEach(page => {

  cy.get(page).should('have.value', 'Widget')

})

或者如果你想要单独的测试

['.pageA', '.pageB', '.pageC', '.pageD'].forEach(page => {

  it(`Page ${page} has the icon`, () => {
    cy.get(page).should('have.value', 'Widget')
  })

});

赛普拉斯教程中更具体的示例,

it.only('Handles filter links', () => {
  const filters = [
    {link: 'Active', expectedLength: 3},
    {link: 'Completed', expectedLength: 1},
    {link: 'All', expectedLength: 4}
  ]
  cy.wrap(filters)
    .each(filter => {
      cy.contains(filter.link)
      .click()

      cy.get('.todo-list li')
      .should('have.length', filter.expectedLength)
    })
})
于 2020-10-15T07:56:06.367 回答
1

您可以使用自定义命令来避免编写可重用的代码。你可以去cypress/support/commands.js写:

Cypress.Commands.add('checkChatIcon', (page) => {
  cy.get(page).should('have.class', 'Widget')
})

在您的测试中,您可以只写:

cy.checkChatIcon('.pageA') 
cy.checkChatIcon('.pageB')
于 2020-10-15T05:30:27.027 回答
0

您应该考虑将图标放在所有页面上的机制并对其进行测试。

如果您必须为您编写的每个页面做一些事情以确保图标存在,那么您将需要测试每个页面。

如果您做了一些事情,以便您编写的每个页面都自动具有图标,那么您只需要测试您所做的事情。在这种情况下,编写单元测试来测试它可能更容易,因为它可能比渲染单个页面更高的平台代码层次结构。

您可以考虑的其他方法是测试每个页面的替代方法是

  • 随机化页面选择,因此每次运行都会测试一个随机页面
  • 创建一个 @slow 测试来测试您不经常运行的每个页面
    • 您可以使用蜘蛛或其他方法获取此页面的列表
    • 您可以使用此机制将其他全局事物的测试结合起来

一般来说,测试每个页面的共同内容是非常糟糕的做法。它会产生巨大的运行时开销,可扩展性极强,而且几乎没有什么好处。

于 2020-10-22T15:23:07.210 回答