我想在赛普拉斯中使用 cy.intercept 从 API 响应中获取 OrderID

I want to get OrderID from API responce using cy.intercept in cypress

我想从 API 响应中获取订单 ID。当我点击“创建订单”按钮时,它将发送一个 POST API 请求和 return 我想保存在我的 JSON 文件中的 ID。

这是我的订单创建代码。

cy.clickOnElement(practicePageSelectors.CreateOrder).click(); // click on add Rx button
cy.readFile('cypress/fixtures/Data.json').then((profile) => {
   cy.searchPatients(practicePageSelectors.searchPatient1, profile.Patient_fullName);
})
cy.searchDoctors(); // search for the doctor
cy.clickOnElementUsingXpath(practicePageSelectors.nextButtonId); // click on the next button
cy.clickOnElement(practicePageSelectors.createOnetimeOrder)
cy.searchMedicine() //search for Medicine
cy.clickOnElementUsingXpathfirst(practicePageSelectors.addMedicine); // click on add button
cy.clickOnElementUsingText(practiceData.paymentButtonName, practiceData.buttonTag); // click on skip payment button
cy.clickOnElementUsingXpath(practicePageSelectors.submit_CreateOrderButton)

我试过类似的东西

cy.intercept({
      method: 'POST',
      url: 'https://ibis-dev.droicelabs.us/api/dispenser/orders/',
    }).then((responce)=>{
      let body = JSON.parse(responce.body)
      cy.log(body)
    })

我不知道如何使用intercept。请指导我

您必须在进行 http 调用之前注册拦截器,然后在您的测试中等待数据。

这应该发生在 before 挂钩中或在您的实际测试用例之上。

cy.intercept({
  method: 'POST',
  url: 'https://ibis-dev.droicelabs.us/api/dispenser/orders/',
}).as('ordersCall')

然后在您需要 ID 的地方

cy.wait('@ordersCall')
  .its('response.body')
  .then((body) => {
    // parsing might be not needed always, depends on the api response
    const bodyData = JSON.parse(body) 
    cy.log(bodyData)
  })

旁注:cy.fixture() 直接从 fixtures 目录读取 - 无需使用 cy.readFile