diff --git a/packages/trace-viewer/src/ui/callTab.css b/packages/trace-viewer/src/ui/callTab.css index 3334b2e2ef..3bca9f7141 100644 --- a/packages/trace-viewer/src/ui/callTab.css +++ b/packages/trace-viewer/src/ui/callTab.css @@ -73,6 +73,14 @@ overflow: hidden; } +a.call-value { + text-decoration: none; +} + +a.call-value:hover { + text-decoration: underline; +} + .call-value::before { content: '\00a0'; } diff --git a/packages/trace-viewer/src/ui/metadataView.tsx b/packages/trace-viewer/src/ui/metadataView.tsx index 6cb315686a..5b50a7f081 100644 --- a/packages/trace-viewer/src/ui/metadataView.tsx +++ b/packages/trace-viewer/src/ui/metadataView.tsx @@ -33,6 +33,12 @@ export const MetadataView: React.FunctionComponent<{ {model.channel &&
channel:{model.channel}
} {model.platform &&
platform:{model.platform}
} {model.options.userAgent &&
user agent:{model.options.userAgent}
} + {model.options.baseURL && ( + <> +
Config
+
baseURL:{model.options.baseURL}
+ + )}
Viewport
{model.options.viewport &&
width:{model.options.viewport.width}
} {model.options.viewport &&
height:{model.options.viewport.height}
} diff --git a/packages/trace/src/trace.ts b/packages/trace/src/trace.ts index ebd3466fd8..0e1c5327a1 100644 --- a/packages/trace/src/trace.ts +++ b/packages/trace/src/trace.ts @@ -24,6 +24,7 @@ export type Size = { width: number, height: number }; export type VERSION = 7; export type BrowserContextEventOptions = { + baseURL?: string, viewport?: Size, deviceScaleFactor?: number, isMobile?: boolean, diff --git a/tests/config/traceViewerFixtures.ts b/tests/config/traceViewerFixtures.ts index 2e6fab2f18..b389f0c07c 100644 --- a/tests/config/traceViewerFixtures.ts +++ b/tests/config/traceViewerFixtures.ts @@ -44,6 +44,7 @@ class TraceViewerPage { consoleStacks: Locator; stackFrames: Locator; networkRequests: Locator; + metadataTab: Locator; snapshotContainer: Locator; constructor(public page: Page) { @@ -57,6 +58,7 @@ class TraceViewerPage { this.stackFrames = page.getByTestId('stack-trace-list').locator('.list-view-entry'); this.networkRequests = page.getByTestId('network-list').locator('.list-view-entry'); this.snapshotContainer = page.locator('.snapshot-container iframe.snapshot-visible[name=snapshot]'); + this.metadataTab = page.locator('.metadata-view'); } async actionIconsText(action: string) { @@ -93,6 +95,10 @@ class TraceViewerPage { await this.page.click('text="Network"'); } + async showMetadataTab() { + await this.page.click('text="Metadata"'); + } + @step async snapshotFrame(actionName: string, ordinal: number = 0, hasSubframe: boolean = false): Promise { await this.selectAction(actionName, ordinal); diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 822c50cc09..539c153df6 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -31,7 +31,9 @@ test.slow(); let traceFile: string; test.beforeAll(async function recordTrace({ browser, browserName, browserType, server }, workerInfo) { - const context = await browser.newContext(); + const context = await browser.newContext({ + baseURL: 'https://example.com', + }); await context.tracing.start({ name: 'test', screenshots: true, snapshots: true, sources: true }); const page = await context.newPage(); await page.goto(`data:text/html,Hello world`); @@ -1368,3 +1370,12 @@ test('should allow hiding route actions', { /route.fulfill/, ]); }); + +test('should show baseURL in metadata pane', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31847' }, +}, async ({ showTraceViewer }) => { + const traceViewer = await showTraceViewer([traceFile]); + await traceViewer.selectAction('page.evaluate'); + await traceViewer.showMetadataTab(); + await expect(traceViewer.metadataTab).toContainText('baseURL:https://example.com'); +});