【问题标题】:How to intercept POST request when multiple requests are being made in Cypress?在 Cypress 中发出多个请求时如何拦截 POST 请求?
【发布时间】:2022-09-30 03:10:12
【问题描述】:

在我的赛普拉斯测试中,我试图在登录时拦截一个请求。

我传递给请求的密码值为9K%bZKR8

我观察到的是,当我单击登录按钮时,会发出 2 个 POST 请求:

第一个请求包含正确的密码9K%bZKR8

我试过听这个,但测试超时,说No request ever occurred.

我什至尝试像下面这样对 URL 进行硬编码,但我不断收到上述错误:

cy.intercept(\'POST\', `**/Users/Login?username=****&password=9K%bZKR8`).as(\'LoginRequest\')

出于某种原因,第二个请求包含不同的密码值 - 9K%25bZKR8。我不确定25 是从哪里来的。

我还在此处对 URL 进行了硬编码,并且它正在以某种方式被拾取:

cy.intercept(\'POST\', `**/Users/Login?username=****&password=9K%25bZKR8`).as(\'LoginRequest\')

我可以使用第二个请求并在该响应上断言,但我认为最好使用第一个请求,因为它包含正确的密码。

有人可以告诉我为什么会出现这两个请求,以及我如何在第一个请求上断言?

  • 你能展示你的拦截、触发请求的动作和等待的完整代码吗?

标签: cypress cypress-intercept


【解决方案1】:

我的理论是9K%25bZKR8 中的%25 是输入字符串中文字字符% 的URL 转义码。

请参阅(URL 编码函数)[https://www.w3schools.com/tags/ref_urlencode.ASP],输入% 并返回%25

为了拦截,我会缩短 URL 并在回调中使用 javascript 来匹配查询字符串部分(即&password=9K%bZKR8

cy.intercept('POST', '**/Users/Login', (req) => {    // anything going to Login
  if (req.query.password === '9K%bZKR8') {
    req.continue(res => {
      console.log(res)        // check the response
    })
  if (req.query.password === '9K%25bZKR8') {
    req.continue(res => {
      console.log(res)        // check the response
    })
  }

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多