Skip to content

Commit 5ff660d

Browse files
authored
feat(navigation): waitForNavigation/goto should not wait until response finished (#1225)
1 parent 3127840 commit 5ff660d

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

docs/api.md

+4
Original file line numberDiff line numberDiff line change
@@ -3185,6 +3185,7 @@ ResourceType will be one of the following: `document`, `stylesheet`, `image`, `m
31853185

31863186
<!-- GEN:toc -->
31873187
- [response.buffer()](#responsebuffer)
3188+
- [response.finished()](#responsefinished)
31883189
- [response.frame()](#responseframe)
31893190
- [response.headers()](#responseheaders)
31903191
- [response.json()](#responsejson)
@@ -3199,6 +3200,9 @@ ResourceType will be one of the following: `document`, `stylesheet`, `image`, `m
31993200
#### response.buffer()
32003201
- returns: <Promise<[Buffer]>> Promise which resolves to a buffer with response body.
32013202

3203+
#### response.finished()
3204+
- returns: <Promise[?string]> Waits for this response to finish, throws when corresponding request failed.
3205+
32023206
#### response.frame()
32033207
- returns: <?[Frame]> A [Frame] that initiated this response, or `null` if navigating to error pages.
32043208

src/network.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,7 @@ export class Request {
165165
}
166166

167167
async _waitForResponse(): Promise<Response> {
168-
const response = await this._waitForResponsePromise;
169-
await response._finishedPromise;
170-
return response;
168+
return await this._waitForResponsePromise;
171169
}
172170

173171
_setResponse(response: Response) {
@@ -271,6 +269,10 @@ export class Response {
271269
return this._headers;
272270
}
273271

272+
finished(): Promise<Error | null> {
273+
return this._finishedPromise;
274+
}
275+
274276
buffer(): Promise<platform.BufferType> {
275277
if (!this._contentPromise) {
276278
this._contentPromise = this._finishedPromise.then(async error => {

test/network.spec.js

+13-10
Original file line numberDiff line numberDiff line change
@@ -258,21 +258,23 @@ module.exports.describe = function({testRunner, expect, MAC, WIN, FFOX, CHROMIUM
258258
expect(failedRequests[0].frame()).toBeTruthy();
259259
});
260260
it('Page.Events.RequestFinished', async({page, server}) => {
261-
const requests = [];
262-
page.on('requestfinished', request => requests.push(request));
263-
await page.goto(server.EMPTY_PAGE);
264-
expect(requests.length).toBe(1);
265-
expect(requests[0].url()).toBe(server.EMPTY_PAGE);
266-
expect(requests[0].response()).toBeTruthy();
267-
expect(requests[0].frame() === page.mainFrame()).toBe(true);
268-
expect(requests[0].frame().url()).toBe(server.EMPTY_PAGE);
261+
const [response] = await Promise.all([
262+
page.goto(server.EMPTY_PAGE),
263+
page.waitForEvent('requestfinished')
264+
]);
265+
const request = response.request();
266+
expect(request.url()).toBe(server.EMPTY_PAGE);
267+
expect(request.response()).toBeTruthy();
268+
expect(request.frame() === page.mainFrame()).toBe(true);
269+
expect(request.frame().url()).toBe(server.EMPTY_PAGE);
269270
});
270271
it('should fire events in proper order', async({page, server}) => {
271272
const events = [];
272273
page.on('request', request => events.push('request'));
273274
page.on('response', response => events.push('response'));
274-
page.on('requestfinished', request => events.push('requestfinished'));
275-
await page.goto(server.EMPTY_PAGE);
275+
const response = await page.goto(server.EMPTY_PAGE);
276+
await response.finished();
277+
events.push('requestfinished')
276278
expect(events).toEqual(['request', 'response', 'requestfinished']);
277279
});
278280
it('should support redirects', async({page, server}) => {
@@ -284,6 +286,7 @@ module.exports.describe = function({testRunner, expect, MAC, WIN, FFOX, CHROMIUM
284286
server.setRedirect('/foo.html', '/empty.html');
285287
const FOO_URL = server.PREFIX + '/foo.html';
286288
const response = await page.goto(FOO_URL);
289+
await response.finished();
287290
expect(events).toEqual([
288291
`GET ${FOO_URL}`,
289292
`302 ${FOO_URL}`,

0 commit comments

Comments
 (0)