You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:54:55