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
+
+ >
+ )}
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');
+});