问题描述
我在所有网页上都有一个小的聊天图标。如何用赛普拉斯写作?
小聊天图标具有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与黄瓜一起使用,请多谢
解决方法
如果断言在单个测试中排列,则可以采用数据驱动的方法
['.pageA','.pageB','.pageC','.pageD'].forEach(page => {
cy.get(page).should('have.value','Widget')
})
或者如果您要进行个别测试
['.pageA','.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)
})
})
,
您可以使用custom commands来避免编写可重用的代码。
您可以转到cypress/support/commands.js
并输入:
Cypress.Commands.add('checkChatIcon',(page) => {
cy.get(page).should('have.class','Widget')
})
在测试中,您可以编写:
cy.checkChatIcon('.pageA')
cy.checkChatIcon('.pageB')
,
您应该考虑将图标放置在所有页面上并进行测试的机制。
如果您必须对所写的每个页面进行某些操作以确保该图标存在,那么您将需要测试每个页面。
如果您进行了某些操作,以便您自动编写的每个页面都带有图标,那么您只需测试已完成的操作即可。在这种情况下,编写单元测试来测试它可能会更容易,因为在平台代码层次结构上它可能比呈现单个页面更高。
您可以考虑的其他方法是测试每个页面的替代方法
- 随机化页面选择,以便每次运行都测试随机页面
- 创建一个@slow测试,以测试您不常运行的每个页面
- 您可以使用蜘蛛网或通过其他方法获取此页面的列表
- 您可以使用这种机制将针对其他全局事物的测试组合起来
通常,对每个页面进行测试以获取共同的内容是非常差的做法。它会产生大量的运行时开销,而这些开销会大规模扩展并且几乎没有收益。