diff --git a/src/PageCollector.ts b/src/PageCollector.ts index 39168dc8..16841149 100644 --- a/src/PageCollector.ts +++ b/src/PageCollector.ts @@ -144,8 +144,11 @@ export class PageCollector { } const data: T[] = []; + for (let index = this.#maxNavigationSaved; index >= 0; index--) { - data.push(...navigations[index]); + if (navigations[index]) { + data.push(...navigations[index]); + } } return data; } diff --git a/tests/PageCollector.test.ts b/tests/PageCollector.test.ts index 5da1d31a..9cd7c423 100644 --- a/tests/PageCollector.test.ts +++ b/tests/PageCollector.test.ts @@ -286,4 +286,36 @@ describe('NetworkCollector', () => { page.emit('request', request); assert.equal(collector.getData(page).length, 2); }); + + it('works with previous navigations', async () => { + const browser = getMockBrowser(); + const page = (await browser.pages())[0]; + const mainFrame = page.mainFrame(); + const navRequest = getMockRequest({ + navigationRequest: true, + frame: page.mainFrame(), + }); + const navRequest2 = getMockRequest({ + navigationRequest: true, + frame: page.mainFrame(), + }); + const request = getMockRequest(); + + const collector = new NetworkCollector(browser); + await collector.init(); + page.emit('request', navRequest); + assert.equal(collector.getData(page, true).length, 1); + + page.emit('framenavigated', mainFrame); + assert.equal(collector.getData(page, true).length, 1); + + page.emit('request', navRequest2); + assert.equal(collector.getData(page, true).length, 2); + + page.emit('framenavigated', mainFrame); + assert.equal(collector.getData(page, true).length, 2); + + page.emit('request', request); + assert.equal(collector.getData(page, true).length, 3); + }); }); diff --git a/tests/tools/network.test.js.snapshot b/tests/tools/network.test.js.snapshot index 0a74003c..df4002ba 100644 --- a/tests/tools/network.test.js.snapshot +++ b/tests/tools/network.test.js.snapshot @@ -34,3 +34,12 @@ reqid=1 GET http://localhost:/one [success - 200] reqid=2 GET http://localhost:/two [success - 200] reqid=3 GET http://localhost:/three [success - 200] `; + +exports[`network > network_list_requests > list requests from previous navigations from redirects 1`] = ` +# list_request response +## Network requests +Showing 1-3 of 3 (Page 1 of 1). +reqid=1 GET http://localhost:/redirect [failed - 302] +reqid=2 GET http://localhost:/redirected [success - 200] +reqid=3 GET http://localhost:/redirected-page [success - 200] +`; diff --git a/tests/tools/network.test.ts b/tests/tools/network.test.ts index c5f666b9..69af7fb4 100644 --- a/tests/tools/network.test.ts +++ b/tests/tools/network.test.ts @@ -71,6 +71,44 @@ describe('network', () => { t.assert.snapshot?.(stabilizeResponseOutput(responseData[0].text)); }); }); + + it('list requests from previous navigations from redirects', async t => { + server.addRoute('/redirect', async (_req, res) => { + res.writeHead(302, { + Location: server.getRoute('/redirected'), + }); + res.end(); + }); + + server.addHtmlRoute( + '/redirected', + html``, + ); + + server.addHtmlRoute( + '/redirected-page', + html`
I was redirected 2 times
`, + ); + + await withBrowser(async (response, context) => { + await context.setUpNetworkCollectorForTesting(); + const page = context.getSelectedPage(); + await page.goto(server.getRoute('/redirect')); + await listNetworkRequests.handler( + { + params: { + includePreviousNavigations: true, + }, + }, + response, + context, + ); + const responseData = await response.handle('list_request', context); + t.assert.snapshot?.(stabilizeResponseOutput(responseData[0].text)); + }); + }); }); describe('network_get_request', () => { it('attaches request', async () => { diff --git a/tests/tools/script.test.ts b/tests/tools/script.test.ts index a31cff1c..981ca92e 100644 --- a/tests/tools/script.test.ts +++ b/tests/tools/script.test.ts @@ -161,10 +161,7 @@ describe('script', () => { '/iframe', html`
`, ); - server.addRoute('/main', async (_req, res) => { - res.write(html``); - res.end(); - }); + server.addHtmlRoute('/main', html``); await withBrowser(async (response, context) => { const page = context.getSelectedPage();