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();
});