From 1894e2834850148d8e17b4b9501c7fae55656815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rene=CC=81?= Date: Tue, 15 Oct 2024 00:00:06 +0200 Subject: [PATCH] added test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: René --- tests/config/traceViewerFixtures.ts | 4 ++ tests/library/trace-viewer.spec.ts | 71 +++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/tests/config/traceViewerFixtures.ts b/tests/config/traceViewerFixtures.ts index 3eb3b11a15..837b953ef4 100644 --- a/tests/config/traceViewerFixtures.ts +++ b/tests/config/traceViewerFixtures.ts @@ -36,6 +36,7 @@ export type TraceViewerFixtures = { class TraceViewerPage { actionTitles: Locator; + actionsTree: Locator; callLines: Locator; consoleLines: Locator; logLines: Locator; @@ -46,9 +47,11 @@ class TraceViewerPage { networkRequests: Locator; metadataTab: Locator; snapshotContainer: Locator; + sourceCodeTab: Locator; constructor(public page: Page) { this.actionTitles = page.locator('.action-title'); + this.actionsTree = page.getByTestId('actions-tree'); this.callLines = page.locator('.call-tab .call-line'); this.logLines = page.getByTestId('log-list').locator('.list-view-entry'); this.consoleLines = page.locator('.console-line'); @@ -59,6 +62,7 @@ class TraceViewerPage { this.networkRequests = page.getByTestId('network-list').locator('.list-view-entry'); this.snapshotContainer = page.locator('.snapshot-container iframe.snapshot-visible[name=snapshot]'); this.metadataTab = page.getByTestId('metadata-view'); + this.sourceCodeTab = page.getByTestId('source-code'); } async actionIconsText(action: string) { diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 0eda4b092a..bbebf5b41c 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -62,6 +62,15 @@ test.beforeAll(async function recordTrace({ browser, browserName, browserType, s } await doClick(); + await context.tracing.group('High-level Group'); + await context.tracing.group('First Mid-level Group', { location: { file: `${__dirname}/tracing.spec.ts`, line: 100, column: 10 } }); + await page.locator('button >> nth=0').click(); + await context.tracing.groupEnd(); + await context.tracing.group('Second Mid-level Group', { location: { file: __filename } }); + await expect(page.getByText('Click')).toBeVisible(); + await context.tracing.groupEnd(); + await context.tracing.groupEnd(); + await Promise.all([ page.waitForNavigation(), page.waitForResponse(server.PREFIX + '/frames/frame.html'), @@ -102,6 +111,67 @@ test('should open trace viewer on specific host', async ({ showTraceViewer }, te await expect(traceViewer.page).toHaveURL(/127.0.0.1/); }); +test('should show groups as tree in trace viewer', async ({ showTraceViewer }) => { + const traceViewer = await showTraceViewer([traceFile]); + await expect(traceViewer.actionTitles).toHaveText([ + /browserContext.newPage/, + /page.gotodata:text\/html,Hello world<\/html>/, + /page.setContent/, + /expect.toHaveTextlocator\('button'\)/, + /expect.toBeHiddengetByTestId\('amazing-btn'\)/, + /expect.toBeHiddengetByTestId\(\/amazing-btn-regex\/\)/, + /page.evaluate/, + /page.evaluate/, + /locator.clickgetByText\('Click'\)/, + /High-level Group/, + /page.waitForNavigation/, + /page.waitForResponse/, + /page.waitForTimeout/, + /page.gotohttp:\/\/localhost:\d+\/frames\/frame.html/, + /page.setViewportSize/, + ]); + await traceViewer.actionsTree.locator('.list-view-entry:has-text("High-level Group") .codicon-chevron-right').click(); + await traceViewer.actionsTree.locator('.list-view-entry:has-text("First Mid-level Group") .codicon-chevron-right').click(); + await traceViewer.actionsTree.locator('.list-view-entry:has-text("Second Mid-level Group") .codicon-chevron-right').click(); + await expect(traceViewer.actionTitles).toHaveText([ + /browserContext.newPage/, + /page.gotodata:text\/html,Hello world<\/html>/, + /page.setContent/, + /expect.toHaveTextlocator\('button'\)/, + /expect.toBeHiddengetByTestId\('amazing-btn'\)/, + /expect.toBeHiddengetByTestId\(\/amazing-btn-regex\/\)/, + /page.evaluate/, + /page.evaluate/, + /locator.clickgetByText\('Click'\)/, + /High-level Group/, + /First Mid-level Group/, + /locator\.clicklocator\('button'\)\.first\(\)/, + /Second Mid-level Group/, + /expect\.toBeVisiblegetByText\('Click'\)/, + /page.waitForNavigation/, + /page.waitForResponse/, + /page.waitForTimeout/, + /page.gotohttp:\/\/localhost:\d+\/frames\/frame.html/, + /page.setViewportSize/, + ]); + await expect(traceViewer.actionsTree.locator('.list-view-entry:has-text("First Mid-level Group") > .list-view-indent')).toHaveCount(1); + await expect(traceViewer.actionsTree.locator('.list-view-entry:has-text("Second Mid-level Group") > .list-view-indent')).toHaveCount(1); + await expect(traceViewer.actionsTree.locator('.list-view-entry:has-text("locator.clicklocator(\'button\').first()") > .list-view-indent')).toHaveCount(2); + await expect(traceViewer.actionsTree.locator('.list-view-entry:has-text("expect.toBeVisiblegetByText(\'Click\')") > .list-view-indent')).toHaveCount(2); + + await traceViewer.showSourceTab(); + await traceViewer.selectAction('High-level Group'); + await expect(traceViewer.sourceCodeTab.locator('.source-tab-file-name')).toHaveAttribute('title', __filename); + await expect(traceViewer.sourceCodeTab.locator('.source-line-running')).toHaveText(/\d+\s+await context.tracing.group\('High-level Group'\);/); + + await traceViewer.selectAction('First Mid-level Group'); + await expect(traceViewer.sourceCodeTab.locator('.source-tab-file-name')).toHaveAttribute('title', `${__dirname}/tracing.spec.ts`); + + await traceViewer.selectAction('Second Mid-level Group'); + await expect(traceViewer.sourceCodeTab.getByText(/Licensed under the Apache License/)).toBeVisible(); +}); + + test('should open simple trace viewer', async ({ showTraceViewer }) => { const traceViewer = await showTraceViewer([traceFile]); await expect(traceViewer.actionTitles).toHaveText([ @@ -114,6 +184,7 @@ test('should open simple trace viewer', async ({ showTraceViewer }) => { /page.evaluate/, /page.evaluate/, /locator.clickgetByText\('Click'\)/, + /High-level Group/, /page.waitForNavigation/, /page.waitForResponse/, /page.waitForTimeout/,