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

Cypress自定义请求头配置:重定向不丢失与Cloudflare验证码绕过

解决方案:Cypress登录自动化+Cloudflare绕过+Excel凭证读取优化

一、全局配置自定义请求头(解决Cloudflare拦截)

你当前仅在登录POST请求中添加自定义头,但Cloudflare的验证可能在页面初始加载、静态资源请求等阶段就触发。建议为所有请求全局添加自定义头,将以下代码放在cypress/support/e2e.js中(所有测试都会生效):

// 为所有请求添加自定义请求头
cy.intercept('*', (req) => {
  req.headers['headerKey'] = 'headerValue'; // 替换为你的实际头键值对
  // 多个头可继续添加
  // req.headers['Another-Custom-Header'] = 'Another-Value';
}).as('allRequests');

二、解决重定向请求头丢失问题

浏览器默认不会在重定向时保留自定义头,通过全局拦截可覆盖所有请求(包括重定向后的请求),无需单独处理每个重定向场景。如果需要更精细控制,可拦截重定向响应并手动触发带头发送:

cy.intercept('POST', '/useraccount/', (req) => {
  req.headers['headerKey'] = 'headerValue';
  req.continue((res) => {
    if (res.statusCode >=300 && res.statusCode <400) {
      const redirectUrl = res.headers.location;
      // 手动发送重定向请求并携带自定义头
      cy.request({
        url: redirectUrl,
        headers: {'headerKey': 'headerValue'},
        followRedirect: false
      });
    }
  });
});

三、Excel凭证读取代码优化

  1. 移除testlogin.js中冗余的import ExcelJS from 'exceljs';,因为getLoginDetails命令已封装Excel读取逻辑。
  2. 添加错误处理避免文件/数据异常:

修改command.js代码:

import ExcelJS from 'exceljs';

Cypress.Commands.add('getLoginDetails', () => {
  return cy.readFile('cypress/fixtures/loginDetails.xlsx', 'binary') 
    .then(fileContent => {
      const workbook = new ExcelJS.Workbook();
      return workbook.xlsx.load(fileContent);
    })
    .then(workbook => {
      const worksheet = workbook.getWorksheet(1);
      if (!worksheet) throw new Error('Excel文件未找到有效工作表');
      
      const username = worksheet.getCell('A2').text.trim();
      const password = worksheet.getCell('B2').text.trim();
      
      if (!username || !password) throw new Error('Excel中用户名或密码为空');
      
      return { username, password };
    })
    .catch(err => {
      cy.log('Excel读取失败:', err.message);
      throw err; // 抛出错误终止测试,避免无效执行
    });
});

四、调整测试代码的拦截逻辑位置

将拦截逻辑放在cy.visit之前,确保初始页面加载请求也携带自定义头:

修改后的testlogin.js:

describe('Login Test', () => {
  it('使用Excel凭证登录', () => {
    // 先配置拦截,再访问页面
    cy.intercept('*', (req) => {
      req.headers['headerKey'] = 'headerValue';
    });

    cy.visit('www.testurl.com');

    cy.getLoginDetails().then(({ username, password }) => {
      cy.get('[data-testid="username"]').type(username);
      cy.get('[data-testid="password"]').type(password);
      cy.get('[data-testid="login-btn"]').click();
    });
  });

  // 全局捕获未处理异常,建议放在e2e.js中统一配置
  Cypress.on('uncaught:exception', (err) => {
    console.log('未捕获异常:', err);
    return false;
  });
});

注意事项

  • Cloudflare可能还有JS挑战、Cookie验证等机制,仅靠自定义头可能无法完全绕过,必要时可从正常登录请求中复制有效Cookie,用cy.setCookie添加到测试中。
  • 确保自定义头是目标网站认可的有效字段(可通过浏览器开发者工具抓取正常登录请求的头信息)。

内容的提问来源于stack exchange,提问作者ikol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:53:16