grafana/k6 · error

adding web vital init script to new browser context

Error message

adding web vital init script to new browser context: %w

What it means

After registering the web-vitals IIFE, each new BrowserContext also registers the web-vitals init script (the polling/reporting half) through the same AddInitScript path, injecting it into every already-open page. This error wraps that second registration failing. Like [617], the script body is a k6 constant, so failures come from the CDP calls against existing pages, not from user code.

Solutions

  1. Create contexts up front, before navigating/crashing workloads
  2. Close unusable pages before creating a new context
  3. Retry the context creation once
  4. Enable K6_BROWSER_LOG=debug and update k6 if it persists
Defensive patterns

Strategy: retry

Try / catch

try {
  ctx = browser.newContext();
} catch (e) {
  if (String(e).includes('adding web vital init script')) {
    await sleep(1000); // let dying page sessions finish detaching
    ctx = browser.newContext(); // retry once
  } else throw e;
}

Prevention

When it happens

Trigger: browser.newContext() with existing pages whose sessions are closed or targets crashed; context creation racing browser/connection shutdown so Page.addScriptToEvaluateOnNewDocument fails.

Common situations: Creating contexts late in a test while other pages are crashing or closing; browser under memory pressure dropping page sessions; teardown races.

Related errors


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/4acf8b8e15df94b7. Report an issue: GitHub.

Appendix: source

Thrown at internal/js/modules/k6/browser/common/browser_context.go:154

		browser:          browser,
		id:               id,
		opts:             opts,
		logger:           logger,
		timeoutSettings:  NewTimeoutSettings(nil),
	}

	if len(opts.Permissions) > 0 {
		err := b.GrantPermissions(opts.Permissions, GrantPermissionsOptions{})
		if err != nil {
			return nil, err
		}
	}

	if err := b.AddInitScript(js.WebVitalIIFEScript); err != nil {
		return nil, fmt.Errorf("adding web vital script to new browser context: %w", err)
	}
	if err := b.AddInitScript(js.WebVitalInitScript); err != nil {
		return nil, fmt.Errorf("adding web vital init script to new browser context: %w", err)
	}
	if err := b.setDownloadsPath(opts.DownloadsPath); err != nil {
		return nil, fmt.Errorf("setting downloads path: %w", err)
	}

	return &b, nil
}

// AddInitScript adds a script that will be initialized on all new pages.
func (b *BrowserContext) AddInitScript(script string) error {
	b.logger.Debugf("BrowserContext:AddInitScript", "bctxid:%v", b.id)

	b.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)

	for _, p := range b.browser.getPages() {
		if err := p.evaluateOnNewDocument(script); err != nil {
			return fmt.Errorf("adding init script to browser context: %w", err)
		}

View on GitHub (pinned to 01ffac6f24)