{"record":{"id":"a5eb4d5212c76d22","repo":"grafana/k6","slug":"getting-original-viewport-size-w","errorCode":null,"errorMessage":"getting original viewport size: %w","messagePattern":"getting original viewport size: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/screenshotter.go","lineNumber":276,"sourceCode":"\t} else {\n\t\tlogger.Warnf(\n\t\t\t\"Screenshotter::screenshot\",\n\t\t\t\"chrome browser returned nil on page.getLayoutMetrics, falling back to defaults for cssVisualViewport \"+\n\t\t\t\t\"(scale: %v, pageX: %v, pageY: %v).\"+\n\t\t\t\t\"This is non-standard behavior, if possible please report this issue (with a reproducible script) \"+\n\t\t\t\t\"to the https://github.com/grafana/k6/issues/new.\",\n\t\t\tvisualViewportScale, visualViewportPageX, visualViewportPageY,\n\t\t)\n\t}\n\n\treturn visualViewportScale, visualViewportPageX, visualViewportPageY, nil\n}\n\nfunc (s *screenshotter) screenshotElement(h *ElementHandle, opts *ElementHandleScreenshotOptions) ([]byte, error) {\n\tformat := opts.Format\n\tviewportSize, originalViewportSize, err := s.originalViewportSize(h.frame.page)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting original viewport size: %w\", err)\n\t}\n\n\terr = h.waitAndScrollIntoViewIfNeeded(h.ctx, false, true, opts.Timeout)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"scrolling element into view: %w\", err)\n\t}\n\n\tbbox, err := h.boundingBox()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"node is either not visible or not an HTMLElement: %w\", err)\n\t}\n\tif bbox.Width <= 0 {\n\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","sourceCodeStart":258,"sourceCodeEnd":294,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/screenshotter.go#L258-L294","documentation":"Entry guard of elementHandle.screenshot()/locator.screenshot({}): it reads the current viewport size (directly from the page, or via in-page evaluation when the page has no emulated viewport). This wraps the failure of that lookup — i.e. the 'getting viewport dimensions'/'unpacking window size' chain (errors 981/982).","triggerScenarios":"elementHandle.screenshot() on a page with a 0x0/unset viewport while the evaluate of window.innerWidth/innerHeight fails (navigation, closed page, cancelled context), or the result fails to convert.","commonSituations":"Screenshots of elements on pages created without a viewport option while navigation is still settling; screenshotting during teardown; browser crash mid-test.","solutions":["Create the page with an explicit viewport (browser.newContext({viewport:{width:1280,height:720}})) so no evaluation is needed.","Await navigation and waitFor the element before elementHandle.screenshot().","Keep the page open until the call resolves; retry once on transient context-destroyed errors.","Upgrade k6 if conversion-related failures persist."],"exampleFix":"// before\nconst p = await browser.newPage();\nawait p.goto(url);\nawait p.$('#chart').then(el => el.screenshot({ path: 'el.png' })); // 0x0 viewport path\n\n// after\nconst p = await browser.newPage({ viewport: { width: 1280, height: 720 } });\nawait p.goto(url);\nconst el = await p.$('#chart');\nawait el.screenshot({ path: 'el.png' });","handlingStrategy":"validation","validationCode":"const p = await browser.newPage({ viewport: { width: 1280, height: 720 } }); // avoids the 0x0-viewport evaluate entirely\nawait p.waitForLoadState('load');","typeGuard":null,"tryCatchPattern":"try { await el.screenshot({ path: 'e.png' }); }\ncatch (e) { if (String(e).includes('getting original viewport size')) { /* set viewport, retry once */ } else throw e; }","preventionTips":["Always create pages/contexts with an explicit viewport.","Await navigation before element screenshots.","Re-query element handles close in time to the capture."],"tags":["k6","browser","screenshot","element-handle","viewport"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}