grafana/k6 · error
getting viewport dimensions
Error message
getting viewport dimensions: %w
What it means
Thrown when a screenshot needs the viewport dimensions (because the page was opened without an explicit viewport size, so originalViewportSize falls back to evaluating window.innerWidth/window.innerHeight) and that evaluation fails. The error wraps whatever the frame evaluate returns — typically a destroyed execution context or a closed target.
Solutions
- Check the wrapped cause — 'target closed'/'context destroyed' means the page died; fix the crash or call screenshot earlier.
- Take screenshots after the page reaches a stable lifecycle state.
- If you don't need the real viewport, launch with an explicit viewport so this code path is skipped entirely.
- Increase container memory / use --disable-dev-shm-usage if Chrome is crashing.
Example fix
// before (viewport: null path, screenshot during churn)
await page.screenshot({ path: 'home.png' });
// after
await page.waitForLoadState('load');
await page.screenshot({ path: 'home.png' }); Defensive patterns
Strategy: try-catch
Validate before calling
if (page.isClosed()) throw new Error('page closed before screenshot');
await page.waitForLoadState('load'); Try / catch
try {
await page.screenshot({ path: 's.png' });
} catch (e) {
if (/getting viewport dimensions.*(target closed|context destroyed)/i.test(String(e))) {
/* page died: report env issue, do not retry */
} else throw e;
} Prevention
- Launch with an explicit viewport to skip the window-evaluation fallback entirely.
- Screenshot while the page is alive and settled, not during teardown.
- Fix renderer crashes (memory, shm) rather than retrying.
When it happens
Trigger: Taking any screenshot on a browser context launched with viewport: null (real viewport mode), while the page is navigating, crashing, or closing, so the `() => ({width: window.innerWidth, height: window.innerHeight})` evaluation cannot run.
Common situations: Launching with options.viewport = null to get the real screen size and then screenshotting during/after teardown; renderer crash in low-memory CI containers; screenshot racing a redirect.
Related errors
- getting original viewport size
- setting viewport size
- unpacking window size
- capturing screenshot
- checking is in viewport: unexpected type %T
AI-assisted analysis of grafana/k6@3fcf5388d7 (2026-09-20).
Data as JSON: /api/errors/ec54461e4567a704.
Report an issue: GitHub.
Appendix: source
Thrown at internal/js/modules/k6/browser/common/screenshotter.go:153
return &size, nil
}
func (s *screenshotter) originalViewportSize(p *Page) (*Size, error) {
viewportSize := p.viewportSize()
if viewportSize.Width != 0 || viewportSize.Height != 0 {
return &viewportSize, nil
}
opts := evalOptions{
forceCallable: true,
returnByValue: true,
}
result, err := p.frameManager.MainFrame().evaluate(s.ctx, mainWorld, opts, `
() => (
{ width: window.innerWidth, height: window.innerHeight }
)`)
if err != nil {
return nil, fmt.Errorf("getting viewport dimensions: %w", err)
}
var returnVal Size
if err := convert(result, &returnVal); err != nil {
return nil, fmt.Errorf("unpacking window size: %w", err)
}
viewportSize.Width = returnVal.Width
viewportSize.Height = returnVal.Height
return &viewportSize, nil
}
func (s *screenshotter) restoreViewport(p *Page, originalSize *EmulatedSize) error {
ctx, cancel := s.cleanupContext()
defer cancel()
if originalSize != nil {
return p.setEmulatedSize(ctx, originalSize)View on GitHub (pinned to 3fcf5388d7)