首页 > 解决方案 > 赛普拉斯有条件退出运行程序/测试

问题描述

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

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 测试呢?

标签: javascriptcypressend-to-end

解决方案


过了一会儿,我注意到我的条件存在问题,因为它正在寻找是否有提示,然后转到时间表;然后如果某些文本不存在然后回家(暂停/希望中止的地方)或单击按钮,回家并完成。我注意到我没有在第一个条件下添加另一个。

我的解决方案是只创建一个函数,其中包含完整测试的所有步骤,除非有一个按钮单击的重定向/重定向。然后我在失败中加入了一个控制台日志,记录了测试结束时发生的事情。就像是:

cy.log('Schedule not approved, redirected, no published schedule. Test ended.')

这为测试提供了一个干净的结束/中断。尽管包装成功/失败会很棒。


推荐阅读