grafana/k6 · error
resetting screenshot background color
Error message
resetting screenshot background color: %w
What it means
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.
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.
Example fix
// before
await page.screenshot({ path: 'a.png', omitBackground: true });
await context.close(); // next run raced here
// after
await page.screenshot({ path: 'a.png', omitBackground: true });
await page.waitForTimeout(100); // let CDP settle
await context.close(); Defensive patterns
Strategy: try-catch
Validate before calling
if (!page.isClosed()) { await page.screenshot({ path: 'a.png', omitBackground: true }); } Try / catch
try {
await page.screenshot({ path: 'a.png', omitBackground: true });
} catch (e) {
if (/resetting screenshot background color/i.test(String(e))) {
// capture itself succeeded; treat as teardown race and continue
} else throw e;
} Prevention
- Take omitBackground screenshots before any close() calls.
- Recognize this as a post-capture cleanup failure — the page was likely closing.
When it happens
Trigger: 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.
Common situations: Screenshots taken as the very last action before context.close()/browser.close(); crashed target immediately after capture.
Related errors
- setting screenshot background transparency
- capturing screenshot
- getting layout metrics for screenshot
- setting viewport size
- converting result ( of type %t) to size
AI-assisted analysis of grafana/k6@3fcf5388d7 (2026-09-20).
Data as JSON: /api/errors/50847db8e4da8904.
Report an issue: GitHub.
Appendix: source
Thrown at internal/js/modules/k6/browser/common/screenshotter.go:190
}
return p.resetViewport(ctx)
}
func (s *screenshotter) screenshot(
sess session, doc, viewport *Rect, format ImageFormat, omitBackground bool, quality int64, path string,
) (buf []byte, err error) {
var clip *cdppage.Viewport
capture := cdppage.CaptureScreenshot()
shouldSetDefaultBackground := omitBackground && format == "png"
if shouldSetDefaultBackground {
action := emulation.SetDefaultBackgroundColorOverride().
WithColor(&cdp.RGBA{R: 0, G: 0, B: 0, A: 0})
defer func() {
ctx, cancel := s.cleanupContext()
defer cancel()
if restoreErr := emulation.SetDefaultBackgroundColorOverride().Do(cdp.WithExecutor(ctx, sess)); restoreErr != nil {
err = errors.Join(err, fmt.Errorf("resetting screenshot background color: %w", restoreErr))
}
}()
if err := action.Do(cdp.WithExecutor(s.ctx, sess)); err != nil {
return nil, fmt.Errorf("setting screenshot background transparency: %w", err)
}
}
// Add common options
capture.WithQuality(quality)
switch format {
case ImageFormatJPEG:
capture.WithFormat(cdppage.CaptureScreenshotFormatJpeg)
default:
capture.WithFormat(cdppage.CaptureScreenshotFormatPng)
}
visualViewportScale, visualViewportPageX, visualViewportPageY, err := getViewPortDimensions(s.ctx, sess, s.logger)
if err != nil {View on GitHub (pinned to 3fcf5388d7)