diff --git a/packages/trace-viewer/src/snapshotRenderer.ts b/packages/trace-viewer/src/snapshotRenderer.ts
index f07035c041..625f011138 100644
--- a/packages/trace-viewer/src/snapshotRenderer.ts
+++ b/packages/trace-viewer/src/snapshotRenderer.ts
@@ -223,7 +223,9 @@ function snapshotScript(...targetIds: (string | undefined)[]) {
scrollLefts.push(e);
for (const element of root.querySelectorAll(`[__playwright_value_]`)) {
- (element as HTMLInputElement | HTMLTextAreaElement).value = element.getAttribute('__playwright_value_')!;
+ const inputElement = element as HTMLInputElement | HTMLTextAreaElement;
+ if (inputElement.type !== 'file')
+ inputElement.value = inputElement.getAttribute('__playwright_value_')!;
element.removeAttribute('__playwright_value_');
}
for (const element of root.querySelectorAll(`[__playwright_checked_]`)) {
diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts
index 426ebbf81b..b9e49da647 100644
--- a/tests/library/trace-viewer.spec.ts
+++ b/tests/library/trace-viewer.spec.ts
@@ -438,12 +438,13 @@ test('should restore scroll positions', async ({ page, runAndTrace, browserName
expect(await frame.locator('div').evaluate(div => div.scrollTop)).toBe(136);
});
-test('should restore control values', async ({ page, runAndTrace }) => {
+test('should restore control values', async ({ page, runAndTrace, asset }) => {
const traceViewer = await runAndTrace(async () => {
await page.setContent(`
+