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

cy.wait()参数获取不完整:日期参数断言匹配失败问题排查

Cypress测试中dateFrom参数仅获取部分值的解决办法

测试场景:在日期输入框填写19/01/2028并点击搜索后,断言dateFrom请求参数时触发错误,实际值为19/0,与预期的19/01/2028不匹配。

可能原因

  • 输入过程中页面提前触发了请求,cy.wait("@searchResults")捕获到的是输入到一半时的预请求,而非点击搜索后的目标请求。
  • Cypress的type命令执行过快,输入框的格式化/校验逻辑还未处理完完整日期,就触发了搜索操作。

解决方案

方案1:验证输入框值后再触发搜索

在点击搜索前,先断言输入框已获取完整日期,确保输入操作完全完成:

it("Fill filter and check query param is filled", () => {
  cy.get('#date-from')
    .type("19/01/2028")
    .should('have.value', "19/01/2028"); // 确认输入框值正确
  cy.get('#date-to')
    .type("19/01/2028")
    .should('have.value', "19/01/2028");
  
  cy.get('#search-btn').click();
  
  cy.wait("@searchResults").then((req) => {
    expect(req.request.query.dateFrom).to.eq("19/01/2028");
  });
});

方案2:精准匹配目标请求

如果页面在输入过程中会发送预请求,可给intercept添加更严格的匹配规则,确保只捕获点击搜索后的请求:

// 修改intercept,仅匹配包含dateFrom参数的搜索请求
cy.intercept('GET', (url) => {
  return url.includes('usage=search') && url.includes('dateFrom');
}, {body: bodyObjSearch2}).as("searchResults");

或者,在点击搜索前才注册intercept,避免捕获输入过程中的预请求:

it("Fill filter and check query param is filled", () => {
  cy.get('#date-from').type("19/01/2028");
  cy.get('#date-to').type("19/01/2028");
  
  // 点击前才注册拦截,确保只捕获本次搜索的请求
  cy.intercept('GET', '*/entries?usage=search*', {body: bodyObjSearch2}).as("searchResults");
  
  cy.get('#search-btn').click();
  cy.wait("@searchResults").then((req) => {
    expect(req.request.query.dateFrom).to.eq("19/01/2028");
  });
});

方案3:给输入操作添加延迟

若输入速度过快导致页面未处理完完整日期,可给type命令添加字符输入延迟:

cy.get('#date-from').type("19/01/2028", { delay: 100 }); // 每个字符间隔100ms
cy.get('#date-to').type("19/01/2028", { delay: 100 });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:06:23