单击后cypress记录多个url重定向

单击后cypress记录多个url重定向,cypress,Cypress,我有一个场景,单击submit按钮将重定向到/redirect1页面,我们将在其中执行一些验证并自动重定向到/redirect2,执行一些其他验证并重定向到/success页面 我需要验证一下,在单击提交按钮时,它是否会移动到/redirect1页面,然后移动到/redirect2页面,最后到达/success页面 如何使用cypress自动化此过程如果您知道URL,您可能会执行以下操作 cy.url().should('include', '/redirect1'); cy.url().sho

我有一个场景,单击submit按钮将重定向到/redirect1页面,我们将在其中执行一些验证并自动重定向到/redirect2,执行一些其他验证并重定向到/success页面

我需要验证一下,在单击提交按钮时,它是否会移动到/redirect1页面,然后移动到/redirect2页面,最后到达/success页面

如何使用cypress自动化此过程如果您知道URL,您可能会执行以下操作

cy.url().should('include', '/redirect1');
cy.url().should('include', '/redirect2');
cy.url().should('include', '/success');

我假设它会尝试这些,并等待它们发生。

我喜欢非常具体地说明我预期会发生什么,所以我通常会做以下操作:

排列:

  • 指定要调用/需要等待的API端点(这不是必需的,但可以确保在调用解析之前不会运行断言)

    (您可以通过精确的字符串、Glob或RegEx来匹配路由)

  • 行动:

  • 合得来

    cy.visit('/')
      .getByText('Start the process')
      .click()
    
  • 断言:

  • a) 如果您希望它立即重定向,请为它断言

    cy.url().should('eq', `${BASE_URL}/redirect1`)
    
  • b) 如果您正在进行API调用并仅在此之后重定向,那么让我们等待它解决,然后断言。我们将等待的API调用指定为
    @
    ,后跟上面设置的别名(
    cy.route(…).as(yourAlias)
    )。我将我的第一个API调用化名为
    registerCall
    ,因此我们在做出进一步断言之前等待该问题的解决:

    cy.wait('@registerCall')
    
    cy.url().should('eq', `${BASE_URL}/redirect1`)
    
  • 如果您希望出现一些文本/加载器,请检查它

    cy.findByTestId('loader-component').should('be.visible')
    cy.getByText(/^please wait$/i).should('be.visible')
    
  • 等待下一个API调用,并在调用后检查路由更改

    cy.wait('@verifyCall')
    
    cy.url().should('eq', `${BASE_URL}/redirect2`)
    
  • 。。。将其余的断言链接起来。这可以永远持续下去

  • 希望这有帮助,让我知道如果我有一些事情不清楚


    另外,
    getByText
    (以及其他很酷的选择器)来自,它构建在的之上,允许您像用户一样导航应用程序,即主要通过查找文本。

    有趣。我会仔细考虑的。我的第一个想法是,如果你成功了,那么你就知道成功了。。这些页面上是否有什么东西告诉你,你进入了页面、一些文本、标题等?@Maccurt没有……让我看得更深入一些,我想有一种方式你可以说url进入了某个页面。我想这可能是答案,但我不知道语法,让我看得更深一些。。。我从来没有这样做过,但我认为这是我将来想做的事情。似乎您需要使用
    cy.location()
    ,因为重定向是按顺序发生的,所以使用命令的回调形式,每个步骤嵌套在前一个回调中<如果将其指定为@vladkras,则不会定义code>BASE\u URL,抱歉,这里的
    BASE\u URL
    只是一个局部变量。如何构造URL字符串完全取决于您,但流程保持不变。
    cy.wait('@verifyCall')
    
    cy.url().should('eq', `${BASE_URL}/redirect2`)