如何在Cypress的then块中终止for循环?
解决Cypress中循环请求直到特定响应的问题
你的代码问题出在Cypress命令的异步特性上:普通的for循环是同步执行的,会一次性把所有循环迭代的cy.request都加入Cypress的命令队列,但队列里的命令还没执行时,循环里的if (continue_loop == 2)判断就已经跑完了——这时候continue_loop还没被then块赋值,自然永远是1,循环无法终止。
要实现“直到获得特定响应才停止请求”的需求,得用递归函数来适配Cypress的异步执行逻辑,代码示例如下:
function loginAttempt(i) { // 设置最大尝试次数,避免无限递归 if (i >= 100) { cy.log("已达到最大尝试次数,终止循环"); return; } cy.request({ url: Cypress.env("api").staging + "/1.0/user/login", method: "POST", failOnStatusCode: false, body: { email: `email${i}@email.com`, password: "Helloworld10", }, }).then((response) => { if (response.status !== 403) { // 未获取到目标响应,继续下一次尝试 loginAttempt(i + 1); } else { // 获取到403响应,终止循环 cy.log(`第${i}次请求获得403响应,停止循环`); } }); } // 启动循环,从第1次尝试开始 loginAttempt(1);
代码逻辑说明
- 递归函数
loginAttempt每次只执行一次请求,确保请求完成后再处理响应 - 在
cy.request的then块中判断响应状态:如果不是403,就递归调用自身并传入i+1;如果是403,就停止递归 - 加入
i >= 100的终止条件,防止因意外情况导致无限递归
内容的提问来源于stack exchange,提问作者Juan Carlos gularte
相关产品推荐
相关产品推荐

