{"record":{"id":"d054ba42f81c8e2f","repo":"grafana/k6","slug":"setting-viewport-size-to-s-w","errorCode":null,"errorMessage":"setting viewport size to %s: %w","messagePattern":"setting viewport size to (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/screenshotter.go","lineNumber":325,"sourceCode":"\t\treturn nil, fmt.Errorf(\"node has 0 width\")\n\t}\n\tif bbox.Height <= 0 {\n\t\treturn nil, fmt.Errorf(\"node has 0 height\")\n\t}\n\n\tfitsViewport := bbox.Width <= viewportSize.Width && bbox.Height <= viewportSize.Height\n\tif !fitsViewport { //nolint:nestif\n\t\toverriddenViewportSize := Size{\n\t\t\tWidth:  math.Max(viewportSize.Width, bbox.Width),\n\t\t\tHeight: math.Max(viewportSize.Height, bbox.Height),\n\t\t}.enclosingIntSize()\n\t\tdefer func() {\n\t\t\tif restoreErr := s.restoreViewport(h.frame.page, originalSize); restoreErr != nil {\n\t\t\t\terr = errors.Join(err, fmt.Errorf(\"restoring viewport: %w\", restoreErr))\n\t\t\t}\n\t\t}()\n\t\tif err := h.frame.page.setViewportSize(s.ctx, overriddenViewportSize); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"setting viewport size to %s: %w\",\n\t\t\t\toverriddenViewportSize, err)\n\t\t}\n\t\terr = h.waitAndScrollIntoViewIfNeeded(h.ctx, false, true, opts.Timeout)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"scrolling element into view: %w\", err)\n\t\t}\n\t\tbbox, err = h.boundingBox()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"node is either not visible or not an HTMLElement: %w\", err)\n\t\t}\n\t\tif bbox.Width <= 0 {\n\t\t\treturn nil, fmt.Errorf(\"node has 0 width\")\n\t\t}\n\t\tif bbox.Height <= 0 {\n\t\t\treturn nil, fmt.Errorf(\"node has 0 height\")\n\t\t}\n\t}\n","sourceCodeStart":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/grafana/k6/blob/3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee/internal/js/modules/k6/browser/common/screenshotter.go#L307-L343","documentation":"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.","triggerScenarios":"Thrown at internal/js/modules/k6/browser/common/screenshotter.go:303 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}