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