diff --git a/packages/trace-viewer/src/snapshotRenderer.ts b/packages/trace-viewer/src/snapshotRenderer.ts
index 9092d97e8c..730cab4d19 100644
--- a/packages/trace-viewer/src/snapshotRenderer.ts
+++ b/packages/trace-viewer/src/snapshotRenderer.ts
@@ -53,12 +53,11 @@ export class SnapshotRenderer {
const visit = (n: NodeSnapshot, snapshotIndex: number, parentTag: string | undefined, parentAttrs: [string, string][] | undefined): string => {
// Text node.
if (typeof n === 'string') {
- const text = escapeText(n);
// Best-effort Electron support: rewrite custom protocol in url() links in stylesheets.
// Old snapshotter was sending lower-case.
if (parentTag === 'STYLE' || parentTag === 'style')
- return rewriteURLsInStyleSheetForCustomProtocol(text);
- return text;
+ return rewriteURLsInStyleSheetForCustomProtocol(n);
+ return escapeText(n);
}
if (!(n as any)._string) {
diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts
index 0f7feb365c..a18526b09e 100644
--- a/tests/library/trace-viewer.spec.ts
+++ b/tests/library/trace-viewer.spec.ts
@@ -429,6 +429,32 @@ test('should work with adopted style sheets and all: unset', async ({ page, runA
}
});
+test('should work with nesting CSS selectors', async ({ page, runAndTrace }) => {
+ test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31607' });
+
+ const traceViewer = await runAndTrace(async () => {
+ await page.setContent(`
+ Hi
+ Hello
+
+ `);
+ await page.evaluate(() => { });
+ });
+ {
+ const frame = await traceViewer.snapshotFrame('page.evaluate', 0);
+ await expect(frame.getByTestId('green-element')).toHaveCSS('color', /* green */'rgb(0, 128, 0)');
+ await expect(frame.getByTestId('red-element')).toHaveCSS('color', /* red */'rgb(255, 0, 0)');
+ }
+});
+
test('should restore scroll positions', async ({ page, runAndTrace }) => {
const traceViewer = await runAndTrace(async () => {
await page.setContent(`