剧作家 waitForResponse 如何等待响应文本“完成”

Pra*_*sad 4 automated-tests typescript protractor angular playwright

我有一个场景,其中 API 接收多个响应(一次一个)并在 UI 上呈现。API 继续轮询数据库,直到接收完所有响应为止。我需要我的脚本等待 API 响应变为“完成”。我尝试了下面的代码,但它没有等到状态完成。

const response = await page.waitForResponse(response => response.url().includes('https://services/url') && response.status() === 200);

console.log('RESPONSE ' + (await response.body()));
Run Code Online (Sandbox Code Playgroud)

以下是记录的响应

{
  "transactionDetail": {
    "transactionID":"866f357f-7541-4ff2-b879-61ca284513a7",
    "transactionTimestamp":"2021-08-02T10:48:50.372207",
    "inLanguage":"en-US",
    "serviceVersion":"1"
  },
  "resultSummary":{
    "inputCount":1,
    "successCount":1,
    "failureCount":0},
    "inquiryDetail": {
      "kaseIterationId":"8a7b11547af8835d017b067ad06e04ba"
    },
  },
  "response":"InProgress"
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让我的脚本等到“响应”变成“已完成”而不是“进行中”。

小智 9

您可以通过提供异步谓词来做到这一点,page.waitForResponse如下所示:

async function isFinished(response) {
    return response.url().includes('https://services/url') && response.status() === 200 && (await response.json()).response === 'Completed'
}

const response = await page.waitForResponse(async (response) => await isFinished(response));
Run Code Online (Sandbox Code Playgroud)