diff --git a/packages/html-reporter/src/links.css b/packages/html-reporter/src/links.css index 4abe8a6caa291..eb9390844b7c3 100644 --- a/packages/html-reporter/src/links.css +++ b/packages/html-reporter/src/links.css @@ -60,6 +60,11 @@ color: var(--color-scale-orange-6); border: 1px solid var(--color-scale-orange-4); } + .label-color-gray { + background-color: var(--color-scale-gray-0); + color: var(--color-scale-gray-6); + border: 1px solid var(--color-scale-gray-4); + } } @media(prefers-color-scheme: dark) { @@ -93,6 +98,11 @@ color: var(--color-scale-orange-2); border: 1px solid var(--color-scale-orange-4); } + .label-color-gray { + background-color: var(--color-scale-gray-9); + color: var(--color-scale-gray-2); + border: 1px solid var(--color-scale-gray-4); + } } .attachment-body { diff --git a/packages/html-reporter/src/testResultView.tsx b/packages/html-reporter/src/testResultView.tsx index 9dcdf29092956..4c504a0118615 100644 --- a/packages/html-reporter/src/testResultView.tsx +++ b/packages/html-reporter/src/testResultView.tsx @@ -134,7 +134,7 @@ export const TestResultView: React.FC<{ )} } - {!!otherAttachments.size && + {!!otherAttachments.size && {[...otherAttachments].map((a, i) => @@ -176,15 +176,27 @@ const StepTreeItem: React.FC<{ }> = ({ test, step, result, depth }) => { return {msToString(step.duration)} - {step.attachments.length > 0 && { evt.stopPropagation(); }}>{icons.attachment()}} {statusIcon(step.error || step.duration === -1 ? 'failed' : 'passed')} {step.title} {step.count > 1 && <> ✕ {step.count}} {step.location && — {step.location.file}:{step.location.line}} } loadChildren={step.steps.length + (step.snippet ? 1 : 0) ? () => { - const children = step.steps.map((s, i) => ); - if (step.snippet) - children.unshift(); - return children; + const snippet = step.snippet ? [] : []; + const steps = step.steps.map((s, i) => ); + const attachments = step.attachments.map(attachmentIndex => ( + + + {icons.attachment()}{result.attachments[attachmentIndex].name} + + + )); + return snippet.concat(steps, attachments); } : undefined} depth={depth}/>; }; diff --git a/tests/playwright-test/reporter-html.spec.ts b/tests/playwright-test/reporter-html.spec.ts index 7c7c60836fdc6..f1e2bb4eda9ad 100644 --- a/tests/playwright-test/reporter-html.spec.ts +++ b/tests/playwright-test/reporter-html.spec.ts @@ -932,9 +932,10 @@ for (const useIntermediateMergeReport of [true, false] as const) { await showReport(); await page.getByRole('link', { name: 'passing' }).click(); - const attachment = page.getByText('foo-2', { exact: true }); + const attachment = page.getByTestId('attachments').getByText('foo-2', { exact: true }); await expect(attachment).not.toBeInViewport(); - await page.getByLabel('attach "foo-2"').getByTitle('link to attachment').click(); + await page.getByLabel('attach "foo-2"').click(); + await page.getByTitle('see "foo-2"').click(); await expect(attachment).toBeInViewport(); await page.reload(); @@ -961,9 +962,10 @@ for (const useIntermediateMergeReport of [true, false] as const) { await showReport(); await page.getByRole('link', { name: 'passing' }).click(); - const attachment = page.getByText('attachment', { exact: true }); + const attachment = page.getByTestId('attachments').getByText('attachment', { exact: true }); await expect(attachment).not.toBeInViewport(); - await page.getByLabel('step').getByTitle('link to attachment').click(); + await page.getByLabel('step').click(); + await page.getByTitle('see "attachment"').click(); await expect(attachment).toBeInViewport(); });