diff --git a/packages/trace-viewer/public/watch.webmanifest b/packages/trace-viewer/public/watch.webmanifest
index ba5434d67b..60e40280d4 100644
--- a/packages/trace-viewer/public/watch.webmanifest
+++ b/packages/trace-viewer/public/watch.webmanifest
@@ -4,7 +4,7 @@
"display": "browser",
"start_url": "watch.html",
"name": "Playwright Test",
- "short_name": "Trace Viewer",
+ "short_name": "Playwright Test",
"icons": [
{
"src": "icon-192x192.png",
diff --git a/packages/trace-viewer/src/snapshotRenderer.ts b/packages/trace-viewer/src/snapshotRenderer.ts
index 46a5496632..4868515451 100644
--- a/packages/trace-viewer/src/snapshotRenderer.ts
+++ b/packages/trace-viewer/src/snapshotRenderer.ts
@@ -104,6 +104,7 @@ export class SnapshotRenderer {
const prefix = snapshot.doctype ? `` : '';
html = prefix + [
'',
+ ``,
``,
``
].join('') + html;
diff --git a/packages/trace-viewer/src/sw.ts b/packages/trace-viewer/src/sw.ts
index 62984d76b9..d5d651c0b4 100644
--- a/packages/trace-viewer/src/sw.ts
+++ b/packages/trace-viewer/src/sw.ts
@@ -44,10 +44,11 @@ async function loadTrace(traceUrl: string, traceFileName: string | null, clientI
} catch (error: any) {
if (error?.message?.includes('Cannot find .trace file') && await traceModel.hasEntry('index.html'))
throw new Error('Could not load trace. Did you upload a Playwright HTML report instead? Make sure to extract the archive first and then double-click the index.html file or put it on a web server.');
- else if (traceFileName)
+ // eslint-disable-next-line no-console
+ console.error(error);
+ if (traceFileName)
throw new Error(`Could not load trace from ${traceFileName}. Make sure to upload a valid Playwright trace.`);
- else
- throw new Error(`Could not load trace from ${traceUrl}. Make sure a valid Playwright Trace is accessible over this url.`);
+ throw new Error(`Could not load trace from ${traceUrl}. Make sure a valid Playwright Trace is accessible over this url.`);
}
const snapshotServer = new SnapshotServer(traceModel.storage(), sha1 => traceModel.resourceForSha1(sha1));
loadedTraces.set(traceUrl, { traceModel, snapshotServer });
diff --git a/packages/trace-viewer/src/traceModel.ts b/packages/trace-viewer/src/traceModel.ts
index 9fa9524d9d..ada2e0a5a9 100644
--- a/packages/trace-viewer/src/traceModel.ts
+++ b/packages/trace-viewer/src/traceModel.ts
@@ -279,9 +279,9 @@ export class TraceModel {
params: metadata.params,
wallTime: metadata.wallTime || Date.now(),
log: metadata.log,
- beforeSnapshot: metadata.snapshots.find(s => s.snapshotName === 'before')?.snapshotName,
- inputSnapshot: metadata.snapshots.find(s => s.snapshotName === 'input')?.snapshotName,
- afterSnapshot: metadata.snapshots.find(s => s.snapshotName === 'after')?.snapshotName,
+ beforeSnapshot: metadata.snapshots.find(s => s.title === 'before')?.snapshotName,
+ inputSnapshot: metadata.snapshots.find(s => s.title === 'input')?.snapshotName,
+ afterSnapshot: metadata.snapshots.find(s => s.title === 'after')?.snapshotName,
error: metadata.error?.error,
result: metadata.result,
point: metadata.point,
diff --git a/tests/assets/trace-1.31.zip b/tests/assets/trace-1.31.zip
new file mode 100644
index 0000000000..4c5a4e3f37
Binary files /dev/null and b/tests/assets/trace-1.31.zip differ
diff --git a/tests/library/snapshotter.spec.ts b/tests/library/snapshotter.spec.ts
index cee7eaf94f..a06d8bb612 100644
--- a/tests/library/snapshotter.spec.ts
+++ b/tests/library/snapshotter.spec.ts
@@ -41,7 +41,7 @@ it.describe('snapshots', () => {
await snapshotter.reset();
const snapshot2 = await snapshotter.captureSnapshot(toImpl(page), 'call@2', 'snapshot@call@2');
const html2 = snapshot2.render().html;
- expect(html2.replace(`"call@2"`, `"call@1"`)).toEqual(html1);
+ expect(html2.replace(/call@2/g, `call@1`)).toEqual(html1);
});
it('should capture resources', async ({ page, toImpl, server, snapshotter }) => {
diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts
index 2f0f968be9..faa3cb5f4b 100644
--- a/tests/library/trace-viewer.spec.ts
+++ b/tests/library/trace-viewer.spec.ts
@@ -800,3 +800,9 @@ test('should update highlight when typing', async ({ page, runAndTrace, server }
await traceViewer.page.keyboard.type('button');
await expect(snapshot.locator('x-pw-glass')).toBeVisible();
});
+
+test('should open trace-1.31', async ({ showTraceViewer }) => {
+ const traceViewer = await showTraceViewer([path.join(__dirname, '../assets/trace-1.31.zip')]);
+ const snapshot = await traceViewer.snapshotFrame('locator.click');
+ await expect(snapshot.locator('[__playwright_target__]')).toHaveText(['Submit']);
+});