赛普拉斯单击后记录多个URL重定向

时间:2018-10-19 10:33:07

标签: cypress

我有一个场景,单击“提交”按钮将重定向到/ redirect1页面,在该页面中我们将进行一些验证,然后自动重定向到/ redirect2,并执行其他一些验证并将重定向到/ success页面。

我需要确认点击提交按钮后,它先移至/ redirect1页面,然后移至/ redirect2页面,最后进入/ success页面

如何使用赛普拉斯自动执行此过程

2 个答案:

答案 0 :(得分:0)

如果您知道网址,则可以执行以下操作

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

我假设它将尝试这些操作,直到它们发生。.

答案 1 :(得分:0)

我希望对即将发生的事情非常具体,因此我通常会执行以下操作:

安排:

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

    cy.server()
    cy.route('POST', '**/registration').as('registerCall')
    cy.route('POST', '**/verification').as('verifyCall')
    

    (您可以通过精确的String,Glob或RegEx,https://docs.cypress.io/api/commands/route.html#Syntax来匹配路线)

行为:

  1. 将其关闭

    cy.visit('/')
      .getByText('Start the process')
      .click()
    

声明:

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

    cy.url().should('eq', `${BASE_URL}/redirect1`)
    

  1. b)如果要进行API调用并仅在此之后进行重定向,则让我们等待它解析然后断言。我们用@指定我们正在等待的API调用,后跟上面设置的别名(cy.route(...).as(yourAlias))。我将第一个API调用的别名命名为registerCall,因此我们在进行进一步的声明之前等待该问题解决:

    cy.wait('@registerCall')
    
    cy.url().should('eq', `${BASE_URL}/redirect1`)
    
  2. 如果您希望显示一些文本/加载器,请进行检查

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

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

希望这会有所帮助,让我知道我是否有些不清楚的地方!

P.S。 getByText(以及其他很酷的选择器)来自cypress-testing-library,它是建立在dom-testing-library之上的,它允许您像用户那样浏览应用程序,即主要通过查找文本。