From 694931a44dd54c5706349b4a659952b7ade11f94 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 27 Jan 2025 14:21:25 +0100 Subject: [PATCH] test page.route --- .../src/client/browserContext.ts | 4 +-- .../src/client/mockingProxy.ts | 5 +-- .../playwright.mockingproxy.spec.ts | 31 +++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/packages/playwright-core/src/client/browserContext.ts b/packages/playwright-core/src/client/browserContext.ts index e4512747c7..ca9bf28749 100644 --- a/packages/playwright-core/src/client/browserContext.ts +++ b/packages/playwright-core/src/client/browserContext.ts @@ -228,8 +228,8 @@ export class BrowserContext extends ChannelOwner await route._innerContinue(true /* isFallback */).catch(() => {}); } - private _onRouteListener = ({ route, browserRequest }: { route: network.Route, browserRequest: network.Route }) => { - const page = browserRequest.request()._safePage(); + private _onRouteListener = ({ route, browserRequest }: { route: network.Route, browserRequest?: network.Request }) => { + const page = browserRequest?._safePage(); if (page) page._onRoute(route); else diff --git a/packages/playwright-core/src/client/mockingProxy.ts b/packages/playwright-core/src/client/mockingProxy.ts index 13ee4ce741..1d1368aded 100644 --- a/packages/playwright-core/src/client/mockingProxy.ts +++ b/packages/playwright-core/src/client/mockingProxy.ts @@ -48,8 +48,9 @@ export class MockingProxy extends ChannelOwner { if (isSimpleCORS) return await route.continue(); - this._browserRequests.set(route._guid, route.request()); - const proxyUrl = `http://localhost:${this.port()}/pw_meta:${route.request()._guid}/`; + const request = route.request(); + this._browserRequests.set(request._guid, request); + const proxyUrl = `http://localhost:${this.port()}/pw_meta:${request._guid}/`; await route.continue({ headers: { 'x-playwright-proxy': encodeURIComponent(proxyUrl) } }); } diff --git a/tests/playwright-test/playwright.mockingproxy.spec.ts b/tests/playwright-test/playwright.mockingproxy.spec.ts index 76eb63caf9..0449772708 100644 --- a/tests/playwright-test/playwright.mockingproxy.spec.ts +++ b/tests/playwright-test/playwright.mockingproxy.spec.ts @@ -288,3 +288,34 @@ test('fetch', async ({ runInlineTest, server, request }) => { expect(result.exitCode).toBe(0); expect(result.passed).toBe(1); }); + +test('inject mode knows originating page', async ({ runInlineTest, server, request }) => { + server.setRoute('/fallback', async (req, res) => { + res.end('fallback'); + }); + server.setRoute('/page', async (req, res) => { + const proxyURL = decodeURIComponent((req.headers['x-playwright-proxy'] as string) ?? ''); + const response = await request.get(proxyURL + server.PREFIX + '/fallback'); + res.end(await response.body()); + }); + const result = await runInlineTest({ + 'playwright.config.ts': ` + module.exports = { + use: { + mockingProxy: { port: 'inject' } + } + }; + `, + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + test('first', async ({ page, context }) => { + await page.route('${server.PREFIX}/fallback', route => route.fulfill({ body: 'first' })); + await page.goto('${server.PREFIX}/page'); + expect(await page.textContent('body')).toEqual('first'); + }); + ` + }, { workers: 1 }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); +});