gpt4 book ai didi

javascript - Cypress 有条件退出运行者/测试

转载 作者:行者123 更新时间:2023-12-05 05:10:32 25 4
gpt4 key购买 nike

因此,我构建了一个我在多个测试中使用的命令,该命令查看页面,如果有提示,则页面将重定向到另一个页面以处理提示(在本例中为批准计划)。然后它还会查看该新页面,如果该页面有一些文本,则它会重定向到主页(问题所在)或者它单击按钮以批准并重定向到主页并正常继续通过测试。

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

没有错误并且测试运行,但现在实际上并没有通过命令。那么如何有条件地停止 cypress 测试呢?

最佳答案

这个很有趣。我赞扬你的足智多谋,尤其是 Cypress 对 conditional testing 有强烈的感情。由于其异步性质。

我最近遇到了类似的问题。对我来说,如果有网络事件,页面上的任何东西在某个时候都不可点击,并且会出现一个 toast 说“正在加载...”,并且在网络事件完成并且 toast 消失之前什么也做不了。基本上,我需要页面在继续之前等待 toast 消失所需的时间(因此进行条件测试)。

我做的是这样的:在 commands.js 中:

Cypress.Commands.add('waitForToast', () => {
cy.get('toast-loading', {timeout: 20000}).should('not.exist');
});

然后在实际的 test.spec.js 中,使用命令:

cy.waitForToast();

这里发生的事情是 Cypress 正在暂停测试并寻找 toast,并等待 20000 毫秒的超时。如果 toast 卡住,测试将退出/失败。如果 toast 消失,测试将继续。

到目前为止,使用断言是进行条件测试的最有效方法。如果您正在等待按钮出现,请使用超时时间更长的断言来等待它。然后,如果它没有出现,测试将退出并失败。

在你的情况下,你可以断言你是否没有回家。

或者

如果你想让测试直接结束而不断言和失败,你可以尝试这样的事情:

cy.get('home-page-item`)
.its('length')
.then(numberOfItems => {
if (numberOfItems > 0) {
DO-NOTHING-ASSERT
} else {
CONTINUE-TEST
}
});

否则我认为 Cypress 没有类似 cy.abortTest() 的东西,因此您必须使用断言或 if else 来解决他们的反条件测试方法。

关于javascript - Cypress 有条件退出运行者/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56527992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com