我有一个场景,单击“提交”按钮将重定向到/ redirect1页面,在该页面中我们将进行一些验证,然后自动重定向到/ redirect2,并执行其他一些验证并将重定向到/ success页面。
我需要确认点击提交按钮后,它先移至/ redirect1页面,然后移至/ redirect2页面,最后进入/ success页面
如何使用赛普拉斯自动执行此过程
答案 0 :(得分:0)
如果您知道网址,则可以执行以下操作
cy.url().should('include', '/redirect1');
cy.url().should('include', '/redirect2');
cy.url().should('include', '/success');
我假设它将尝试这些操作,直到它们发生。.
答案 1 :(得分:0)
我希望对即将发生的事情非常具体,因此我通常会执行以下操作:
安排:
指定您要调用的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来匹配路线)
行为:
将其关闭
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`)
...链接其余的断言。这可以永远持续下去。
希望这会有所帮助,让我知道我是否有些不清楚的地方!
P.S。 getByText
(以及其他很酷的选择器)来自cypress-testing-library,它是建立在dom-testing-library之上的,它允许您像用户那样浏览应用程序,即主要通过查找文本。