javascript - 赛普拉斯有条件退出运行程序/测试
问题描述
因此,我构建了一个在多个测试中使用的命令,该命令查看页面,如果存在提示,则页面将重定向到另一个页面以处理提示(在本例中是批准计划)。然后它还会查看该新页面,如果该页面有一些文本,则它会重定向到主页(问题所在),或者它单击按钮批准并重定向到主页并正常继续测试。
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 测试呢?
解决方案
过了一会儿,我注意到我的条件存在问题,因为它正在寻找是否有提示,然后转到时间表;然后如果某些文本不存在然后回家(暂停/希望中止的地方)或单击按钮,回家并完成。我注意到我没有在第一个条件下添加另一个。
我的解决方案是只创建一个函数,其中包含完整测试的所有步骤,除非有一个按钮单击的重定向/重定向。然后我在失败中加入了一个控制台日志,记录了测试结束时发生的事情。就像是:
cy.log('Schedule not approved, redirected, no published schedule. Test ended.')
这为测试提供了一个干净的结束/中断。尽管包装成功/失败会很棒。
推荐阅读
- r - 如何映射嵌套数据框,并将多列存储为输出
- python - 在 Python 字典中对值进行排序
- docker - 了解 Hyperledger Fabric 中的 Docker 容器内部结构
- java - 媒体投影需要 ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION 类型的前台服务
- c++ - 从 GDB 调用重载运算符
- memory - 在并行 CPU 架构中,分布式内存架构中的 CPU 如何相互通信?
- laravel - 创建新条目(一对一多态关系)
- micronaut - micronaut 将 httprequest 重定向到不同的服务
- javascript - 过渡中的Vue过渡在错误的地方结束过渡
- c - 如何使用 pthread 库模拟 CPU 调度(多级队列)?