Búsqueda de sitios web

angular - Playwright waitForResponse cómo esperar hasta que la respuesta tenga el texto "completed"


Tengo un escenario donde la API recibe múltiples respuestas (una a la vez) y las muestra en la interfaz de usuario. La API sigue consultando la base de datos hasta que recibe todas las respuestas. Necesito que mi script espere hasta que la respuesta de la API sea "completa". Probé el siguiente código, pero no está esperando hasta que el estado esté completo.

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

console.log('RESPONSE ' + (await response.body()));

A continuación se muestra la respuesta registrada

{
  "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"
}

¿Cómo puedo hacer que mi script espere hasta que la "respuesta" se convierta en "Completado" en lugar de "En progreso".

Respuesta #1

Puedes hacer esto proporcionando un predicado asíncrono a page.waitForResponse así:

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));

Artículos relacionados