所有页面中都有一个图标,如何在不使用重复代码的情况下进行编码?

时间:2020-10-15 02:25:21

标签: java cucumber cypress cypress-cucumber-preprocessor

我在所有网页上都有一个小的聊天图标。如何用赛普拉斯写作?

小聊天图标具有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与黄瓜一起使用,请多谢

3 个答案:

答案 0 :(得分:2)

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

['.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')
  })

});

来自Cypress tutorial的更具体的示例,

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

答案 1 :(得分:1)

您可以使用custom commands来避免编写可重用的代码。 您可以转到cypress/support/commands.js并输入:

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

在测试中,您可以编写:

cy.checkChatIcon('.pageA') 
cy.checkChatIcon('.pageB')

答案 2 :(得分:0)

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

如果您必须对所写的每个页面进行某些操作以确保该图标存在,那么您将需要测试每个页面。

如果您进行了某些操作,以便您自动编写的每个页面都带有图标,那么您只需测试已完成的操作即可。在这种情况下,编写单元测试来测试它可能会更容易,因为在平台代码层次结构上它可能比呈现单个页面更高。

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

  • 随机化页面选择,以便每次运行都测试随机页面
  • 创建一个@slow测试,以测试您不常运行的每个页面
    • 您可以使用蜘蛛网或通过其他方法获取此页面的列表
    • 您可以使用这种机制将针对其他全局事物的测试组合起来

通常,对每个页面进行测试以获取共同的内容是非常差的做法。它会产生大量的运行时开销,而这些开销会大规模扩展并且几乎没有收益。

相关问题