{"record":{"id":"50847db8e4da8904","repo":"grafana/k6","slug":"resetting-screenshot-background-color-w","errorCode":null,"errorMessage":"resetting screenshot background color: %w","messagePattern":"resetting screenshot background color: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/screenshotter.go","lineNumber":190,"sourceCode":"\t}\n\treturn p.resetViewport(ctx)\n}\n\nfunc (s *screenshotter) screenshot(\n\tsess session, doc, viewport *Rect, format ImageFormat, omitBackground bool, quality int64, path string,\n) (buf []byte, err error) {\n\tvar clip *cdppage.Viewport\n\tcapture := cdppage.CaptureScreenshot()\n\n\tshouldSetDefaultBackground := omitBackground && format == \"png\"\n\tif shouldSetDefaultBackground {\n\t\taction := emulation.SetDefaultBackgroundColorOverride().\n\t\t\tWithColor(&cdp.RGBA{R: 0, G: 0, B: 0, A: 0})\n\t\tdefer func() {\n\t\t\tctx, cancel := s.cleanupContext()\n\t\t\tdefer cancel()\n\t\t\tif restoreErr := emulation.SetDefaultBackgroundColorOverride().Do(cdp.WithExecutor(ctx, sess)); restoreErr != nil {\n\t\t\t\terr = errors.Join(err, fmt.Errorf(\"resetting screenshot background color: %w\", restoreErr))\n\t\t\t}\n\t\t}()\n\t\tif err := action.Do(cdp.WithExecutor(s.ctx, sess)); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"setting screenshot background transparency: %w\", err)\n\t\t}\n\t}\n\n\t// Add common options\n\tcapture.WithQuality(quality)\n\tswitch format {\n\tcase ImageFormatJPEG:\n\t\tcapture.WithFormat(cdppage.CaptureScreenshotFormatJpeg)\n\tdefault:\n\t\tcapture.WithFormat(cdppage.CaptureScreenshotFormatPng)\n\t}\n\n\tvisualViewportScale, visualViewportPageX, visualViewportPageY, err := getViewPortDimensions(s.ctx, sess, s.logger)\n\tif err != nil {","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/grafana/k6/blob/3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee/internal/js/modules/k6/browser/common/screenshotter.go#L172-L208","documentation":"After a successful capture with omitBackground, the module resets the background color override by calling Emulation.SetDefaultBackgroundColorOverride with no color. If that reset fails, 'resetting screenshot background color' wraps the CDP error. The screenshot bytes were already produced but are discarded — the function returns nil on this path, so a failed cleanup aborts the whole call.","triggerScenarios":"page.screenshot({ omitBackground: true, type: 'png' }) where the capture succeeds but the CDP session dies between capture and reset (page closing, target destroyed, browser crash) — a narrow race window.","commonSituations":"Screenshots taken as the very last action before context.close()/browser.close(); crashed target immediately after capture.","solutions":["Take omitBackground screenshots before initiating teardown, not between close() calls.","Check the wrapped error for target/session closure and treat it as a teardown race rather than a screenshot defect.","Retry the screenshot if transparent capture is essential to the test's assertions."],"exampleFix":"// before\nawait page.screenshot({ path: 'a.png', omitBackground: true });\nawait context.close(); // next run raced here\n\n// after\nawait page.screenshot({ path: 'a.png', omitBackground: true });\nawait page.waitForTimeout(100); // let CDP settle\nawait context.close();","handlingStrategy":"try-catch","validationCode":"if (!page.isClosed()) { await page.screenshot({ path: 'a.png', omitBackground: true }); }","typeGuard":null,"tryCatchPattern":"try {\n  await page.screenshot({ path: 'a.png', omitBackground: true });\n} catch (e) {\n  if (/resetting screenshot background color/i.test(String(e))) {\n    // capture itself succeeded; treat as teardown race and continue\n  } else throw e;\n}","preventionTips":["Take omitBackground screenshots before any close() calls.","Recognize this as a post-capture cleanup failure — the page was likely closing."],"tags":["k6","browser","screenshot","omit-background","cdp"],"backgroundTag":"cdp-command-failed","analyzedSha":"3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee","analyzedAt":"2026-09-20T22:01:45.163Z","contentChangedAt":"2026-09-20T22:01:45.163Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}