我正在编写一个测试,如果我在一个页面上着陆,如果有任何记录可用,我需要单击记录附近的三个点按钮。但是如果页面上没有可用的记录,我应该跳过测试。
cy.get('body')
.then(($body) => {
if ($body.find('.ant-empty-description').length) {
cy.log('Element not found. Skip the Test')
}
else {
cy.xpath("//tbody[@class='ant-table-tbody']//tr[" + rowNumber + "]//td[4]//button//em").click()
}
})
我正在使用一种方法,如果"未找到记录"消息存在,我需要跳过测试,否则单击记录附近的按钮。
有时有必要进行有条件的测试,但在我看来,使用<body>
作为基本元素是错误的。
<body>
总是在页面上,但是如果从API获取表数据可能不会。
测试总是比API运行得快,总是看到空行占位符。
使用的模式
添加intercept()
,等待API响应
使用表行作为条件检查的基本元素-总是至少有一行(但可能是"No records")行).
cy.intercept(...).as('tableData')
...
cy.wait('@tableData')
cy.get('tbody tr').then($rows => { // may be only one "No record" row
const noData = $rows.text().includes('No Record found')
if (!noData) {
$rows.eq(rowNumber).find('td').eq(4]).find('button').click()
}
})
您可以使用mocha的.skip()
功能。请注意,您必须使用function()
而不是箭头函数。
it('test', function() {
cy.get('body')
.then(function($body) {
if ($body.find('.ant-empty-description').length) {
cy.log('Element not found. Skip the Test')
this.skip()
} else {
cy.xpath("//tbody[@class='ant-table-tbody']//tr[" + rowNumber + "]//td[4]//button//em").click()
}
})
})
话虽如此,我同意@jjhelguero的观点——以这种方式使用跳过是一种反测试模式。理想情况下,你应该控制一个元素是否会出现在网页上,并使用你的测试设置来操纵页面是否有该元素。