web-dev-qa-db-fra.com

Marionnettiste: Comment écouter une réponse spécifique?

Je bricole avec l'api de noeud sans tête chrome chrome appelé puppeteer.

Je me demande comment écouter une réponse à une demande spécifique et comment agir en conséquence.

J'ai regardé les événements requestfinish et response mais cela me donne tous la demande/les réponses déjà effectuées dans la page.

Comment puis-je obtenir un comportement commenté?

Merci !

10
Alex29

Une option consiste à effectuer les opérations suivantes:

  page.on('response', response => {
    if (response.url().endsWith("your/match"))
      console.log("response code: ", response.status());
      // do something here
  });

Cela intercepte toujours toutes les demandes, mais vous permet de filtrer et d'agir sur l'émetteur d'événement.

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#event-response

16
Reniks

Réponse filtrée (attendre jusqu'à 11 secondes) corps analysé en JSON avec le patch initialement demandé ou POST méthode à chaque fois que vous serez appelé ainsi:

const finalResponse = await page.waitForResponse(response => 
  response.url() === urlOfRequest 
  && (response.request().method() === 'PATCH' 
  || response.request().method() === 'POST'), 11);
let responseJson = await finalResponse.json();
console.log(responseJson);
0
kirill .z

Depuis marionnettiste v1.6.0 (Je suppose), vous pouvez utiliser page.waitForResponse(urlOrPredicate[, options])

Exemple d'utilisation à partir de documents:

const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
0
Ilya Zub

J'utilisais jest-puppeteer et essayais de tester un code de réponse spécifique de mon serveur de test. page.goto()résout la réponse de la demande d'origine .

Voici un test simple qu'une réponse 404 Est retournée quand elle est attendue.

describe(`missing article page`, () => {
    let response;
    beforeAll(async () => {
        response = await page.goto('http://my-test-server/article/this-article-does-not-exist')
    })
    it('has an 404 response for missing articles', () => {
        expect(response.status()).toEqual(404)
    })

    it('has a footer', async () => {
        await expect(page).toMatch('My expected footer content')
    })
})
0
ckeeney