grafana/k6 · error
setting viewport size to
Error message
setting viewport size to %s: %w
What it means
Raised in screenshotElement when the element's bounding box is larger than the current viewport and the code tries to temporarily enlarge the viewport (via Page.setViewportSize / Emulation.setDeviceMetricsOverride) to the element size before capturing. The '%s' is the computed overriding Size (max of viewport and element dimensions, enclosed to integers). It fires when the CDP viewport override is rejected — typically because the page/target was closed or the CDP session is no longer healthy mid-screenshot.
Solutions
- Ensure the page is not closed or navigating while the screenshot is taken
- Retry the screenshot after re-focusing or reloading the page
- If the element is very large, capture with fullPage: true instead of relying on viewport override
- Check browser console/devtools for the underlying CDP error attached after the colon
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at internal/js/modules/k6/browser/common/screenshotter.go:303 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of grafana/k6@3fcf5388d7 (2026-09-20).
Data as JSON: /api/errors/d054ba42f81c8e2f.
Report an issue: GitHub.
Appendix: source
Thrown at internal/js/modules/k6/browser/common/screenshotter.go:325
return nil, fmt.Errorf("node has 0 width")
}
if bbox.Height <= 0 {
return nil, fmt.Errorf("node has 0 height")
}
fitsViewport := bbox.Width <= viewportSize.Width && bbox.Height <= viewportSize.Height
if !fitsViewport { //nolint:nestif
overriddenViewportSize := Size{
Width: math.Max(viewportSize.Width, bbox.Width),
Height: math.Max(viewportSize.Height, bbox.Height),
}.enclosingIntSize()
defer func() {
if restoreErr := s.restoreViewport(h.frame.page, originalSize); restoreErr != nil {
err = errors.Join(err, fmt.Errorf("restoring viewport: %w", restoreErr))
}
}()
if err := h.frame.page.setViewportSize(s.ctx, overriddenViewportSize); err != nil {
return nil, fmt.Errorf("setting viewport size to %s: %w",
overriddenViewportSize, err)
}
err = h.waitAndScrollIntoViewIfNeeded(h.ctx, false, true, opts.Timeout)
if err != nil {
return nil, fmt.Errorf("scrolling element into view: %w", err)
}
bbox, err = h.boundingBox()
if err != nil {
return nil, fmt.Errorf("node is either not visible or not an HTMLElement: %w", err)
}
if bbox.Width <= 0 {
return nil, fmt.Errorf("node has 0 width")
}
if bbox.Height <= 0 {
return nil, fmt.Errorf("node has 0 height")
}
}
View on GitHub (pinned to 3fcf5388d7)