因此,我建立了一个用于多个测试的命令,该命令会查看该页面,如果有提示,则该页面将重定向到另一个页面以处理该提示(在这种情况下,是批准计划)。然后,它还会查看该新页面,如果该页面上有一些文本,则会重定向到主页(问题所在),或者单击按钮批准并重定向到主页,然后继续正常进行测试。 / p>
Cypress.Commands.add('approval_redirect', () => {
cy.get('body').then(($body) => {
if ($body.text().includes(
'You must approve your weekly schedule before starting!'
)) {
cy.get('.container a')
.first()
.click()
cy.get('main').then(($main) => {
if ($main.text().includes('schedule')) {
cy.get('button')
.click()
cy.pause()
} else {
cy.get('ul > button')
.click()
}
})
}
})
})
现在,如果要转到新页面以验证日程安排,并且没有按钮可以单击它,则返回首页然后暂停。我暂停了一下,因为它随后将继续进行测试,并导致大量失败。
例如,在一项测试中,我有:
it('starts here', function (){
cy.login()
.wait(1000)
cy.approval_redirect()
cy.get('#Route')
.click()
.wait(1000)
})
因此在这种情况下,如果它在未单击按钮后重定向到首页,我希望它完全停止测试。没什么可做的。
有没有办法完全阻止跑步者?如何将其放入测试中以检查命令是否失败?
我以为我可以用以下命令将函数包装起来:
function findFailure(failure,success){cy.get...}
然后我放的不是cy.pause()
failure();
return;
然后在ul>按钮下
success();
return;
然后在测试中我做了:
it('starts here', function (){
cy.login()
.wait(1000)
cy.approval_redirect()
const failure = function(){
this.skip()
}
const success = function(){
cy.get('#Route')
.click()
.wait(1000)
}
})
没有错误,测试可以运行,但是现在实际上并没有通过命令。那我该如何有条件地停止柏树测试?
答案 0 :(得分:0)
这很有趣。我赞扬您的足智多谋,尤其是因为赛普拉斯在conditional testing方面由于其异步特性而拥有强烈的感情。
我最近有一个类似的问题。对我来说,如果有网络活动,在某个点上页面上的任何内容都无法单击,并且吐司会显示“正在加载...”,在网络活动完成并且吐司消失之前,什么也无法做。基本上,我需要页面等待烤面包消失所需的时间,然后再继续(因此进行有条件的测试)。
我所做的是这样的:
在commands.js
中:
Cypress.Commands.add('waitForToast', () => {
cy.get('toast-loading', {timeout: 20000}).should('not.exist');
});
然后使用以下命令在实际的test.spec.js
中输入
cy.waitForToast();
这里发生的是赛普拉斯正在暂停测试并寻找吐司,并等待20000毫秒的超时。如果吐司卡住了,则测试将退出/失败。如果烤面包消失了,测试将继续。
到目前为止,使用断言是进行条件测试的最有效方法。如果您正在等待按钮的出现,请使用超时时间较长的断言来等待它。然后,如果未显示,则测试将退出并失败。
在您的情况下,您可以断言是否不回家。
或者
如果您希望测试在没有断言和失败的情况下结束,则可以尝试如下操作:
cy.get('home-page-item`)
.its('length')
.then(numberOfItems => {
if (numberOfItems > 0) {
DO-NOTHING-ASSERT
} else {
CONTINUE-TEST
}
});
否则,我认为赛普拉斯没有cy.abortTest()
之类的东西,因此您必须使用断言或其他方法来解决其反条件测试方法。
答案 1 :(得分:0)
过了一会儿,我发现我的条件语句出现问题,因为它在寻找提示是否存在,然后转到时间表;然后,如果没有某些文字,则返回首页(暂停/希望中止的位置)或单击按钮,返回首页并完成。我注意到我没有在第一个条件下放入另一个。
我的解决方案是只创建一个包含完整测试所有步骤的函数,并且不禁止单击按钮的重定向/重定向。然后,我将失败的控制台日志放入失败日志中,以了解结束测试的情况。像这样:
cy.log('Schedule not approved, redirected, no published schedule. Test ended.')
这为测试提供了清晰的结束/中断。尽管成功/失败是一件好事。