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

如何在Cypress测试中获取GET请求的查询参数值

解决Cypress中获取请求查询参数的问题

你的代码主要有两个问题导致无法正确存储company_uuid:

1. 不必要的硬等待导致请求监听失效

你先调用了cy.wait(10000)再等待@getEquipment请求,但登录后发起的/api/equipment请求很可能在这10秒内已经完成,此时cy.wait('@getEquipment')会因为找不到待处理的匹配请求而超时,自然无法获取参数。

2. 变量作用域与异步执行的问题

即使请求捕获成功,如果companyUUID是全局普通变量,Cypress的异步执行机制会导致后续代码无法正确拿到它的值,需要用Cypress提供的存储方式来处理。

修正后的代码示例

// 先设置请求拦截,确保监听后续所有匹配的GET请求
cy.intercept('GET', '/api/equipment*').as('getEquipment');

// 执行登录操作
cy.login(emailClientTest, password);

// 直接等待拦截的请求完成,去掉不可靠的硬等待
cy.wait('@getEquipment').then((interception) => {
  // 先断言参数存在,避免后续报错
  expect(interception.request.query).to.have.property('company_uuid');
  
  // 方式1:存入Cypress环境变量,全局可用
  Cypress.env('companyUUID', interception.request.query.company_uuid);
  
  // 方式2:用Cypress别名存储,后续通过cy.get('@companyUUID')获取
  cy.wrap(interception.request.query.company_uuid).as('companyUUID');
  
  // 方式3:在当前回调内直接使用变量
  const companyUUID = interception.request.query.company_uuid;
  cy.log(`当前获取到的company_uuid:${companyUUID}`);
  // 这里可以直接执行依赖该参数的操作,比如发起新请求
  // cy.get(`/api/companies/${companyUUID}`);
});

// 后续步骤使用存储的参数示例
// 使用别名方式
cy.get('@companyUUID').then((uuid) => {
  cy.log(`后续步骤使用的company_uuid:${uuid}`);
});

// 使用环境变量方式
cy.log(`环境变量中的company_uuid:${Cypress.env('companyUUID')}`);

额外注意事项

  • 确保/api/equipment*的路径匹配正确,比如请求是否带前缀、是否是完整路径,如果匹配不到,cy.wait('@getEquipment')也会超时,可通过Cypress控制台的Network面板确认请求路径。
  • 如果登录后发起多个匹配/api/equipment*的请求,可通过cy.wait('@getEquipment', { timeout: 15000 })延长超时时间,或者用cy.wait(['@getEquipment', '@getEquipment'])等待多次请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:41:08