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

  1. Ensure the page is not closed or navigating while the screenshot is taken
  2. Retry the screenshot after re-focusing or reloading the page
  3. If the element is very large, capture with fullPage: true instead of relying on viewport override
  4. 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)