{"record":{"id":"ecfb7ffd36ceda1c","repo":"grafana/k6","slug":"unpacking-window-size-w","errorCode":null,"errorMessage":"unpacking window size: %w","messagePattern":"unpacking window size: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/screenshotter.go","lineNumber":158,"sourceCode":"\tif viewportSize.Width != 0 || viewportSize.Height != 0 {\n\t\treturn &viewportSize, nil\n\t}\n\n\topts := evalOptions{\n\t\tforceCallable: true,\n\t\treturnByValue: true,\n\t}\n\tresult, err := p.frameManager.MainFrame().evaluate(s.ctx, mainWorld, opts, `\n\t() => (\n\t\t{ width: window.innerWidth, height: window.innerHeight }\n\t)`)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting viewport dimensions: %w\", err)\n\t}\n\n\tvar returnVal Size\n\tif err := convert(result, &returnVal); err != nil {\n\t\treturn nil, fmt.Errorf(\"unpacking window size: %w\", err)\n\t}\n\n\tviewportSize.Width = returnVal.Width\n\tviewportSize.Height = returnVal.Height\n\n\treturn &viewportSize, nil\n}\n\nfunc (s *screenshotter) restoreViewport(p *Page, originalSize *EmulatedSize) error {\n\tctx, cancel := s.cleanupContext()\n\tdefer cancel()\n\tif originalSize != nil {\n\t\treturn p.setEmulatedSize(ctx, originalSize)\n\t}\n\treturn p.resetViewport(ctx)\n}\n\nfunc (s *screenshotter) screenshot(","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/grafana/k6/blob/3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee/internal/js/modules/k6/browser/common/screenshotter.go#L140-L176","documentation":"Companion to the previous error: the window.innerWidth/innerHeight evaluation succeeded, but converting the result into a Size struct failed ('unpacking window size'). The evaluate runs with returnByValue: true, so a non-object or partially-shaped object (missing width/height, or non-numeric values) is the cause.","triggerScenarios":"Screenshotting in viewport:null mode on a page whose window object reports undefined dimensions (e.g. during document replacement, or in about:blank edge cases right after creation), so the returned value lacks usable width/height fields.","commonSituations":"Screenshots immediately after browser.newPage() before any content loads, in real-viewport mode; exotic embedded pages where innerWidth is not yet a number.","solutions":["Take the screenshot after real content has loaded (wait for a selector or 'load').","Prefer launching with an explicit viewport so the fallback evaluation is never used.","If it reproduces on about:blank, navigate to the target page first."],"exampleFix":"// before\nconst page = await context.newPage(); // viewport: null context\nawait page.screenshot({ path: 'p.png' }); // too early\n\n// after\nconst page = await context.newPage();\nawait page.goto('https://example.com');\nawait page.screenshot({ path: 'p.png' });","handlingStrategy":"validation","validationCode":"// ensure real content exists before capturing in viewport:null mode\nawait page.goto(url);\nawait page.waitForSelector('body *');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never screenshot a freshly opened blank page in real-viewport mode.","Prefer an explicit launch viewport when you don't need the physical screen size."],"tags":["k6","browser","screenshot","viewport","type-conversion"],"backgroundTag":"screenshot-dom-measurement-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"}