grafana/k6 · error

getting page frame tree: %w

Error message

getting page frame tree: %w

What it means

Right after Page.enable, initFrameTree (frame_session.go:434) calls Page.getFrameTree to build k6's in-memory frame structures. If the CDP call itself errors, it is wrapped with this message. This is a transport/target-level failure (dead session, crashed renderer) — distinct from the nil-tree case which is handled separately.

Source

Thrown at internal/js/modules/k6/browser/common/frame_session.go:434

}

func (fs *FrameSession) initFrameTree() error {
	fs.logger.Debugf("NewFrameSession:initFrameTree",
		"sid:%v tid:%v", fs.session.ID(), fs.targetID)

	action := cdppage.Enable()
	if err := action.Do(cdp.WithExecutor(fs.ctx, fs.session)); err != nil {
		return fmt.Errorf("enabling page domain: %w", err)
	}

	var frameTree *cdppage.FrameTree
	var err error

	// Recursively enumerate all existing frames in page to create initial in-memory structures
	// used for access and manipulation from JS.
	action2 := cdppage.GetFrameTree()
	if frameTree, err = action2.Do(cdp.WithExecutor(fs.ctx, fs.session)); err != nil {
		return fmt.Errorf("getting page frame tree: %w", err)
	} else if frameTree == nil {
		// This can happen with very short scripts when we might not have enough
		// time to initialize properly.
		return fmt.Errorf("got a nil page frame tree")
	}

	// Any new frame may have a child frame, not just mainframes.
	fs.handleFrameTree(frameTree, fs.isMainFrame())

	if fs.isMainFrame() {
		fs.initRendererEvents()
	}
	return nil
}

func (fs *FrameSession) initIsolatedWorld(name string) error {
	fs.logger.Debugf("NewFrameSession:initIsolatedWorld",
		"sid:%v tid:%v", fs.session.ID(), fs.targetID)

View on GitHub (pinned to 93accf6570)

Solutions

  1. Retry the operation (new page or goto) — these races are often transient at attach time
  2. Avoid creating pages that immediately self-close; add small delays or wait for a stable state after goto
  3. If persistent, capture chromium crash logs (chrome_debug.log / --enable-logging) to find the renderer crash cause
Defensive patterns

Strategy: retry

Try / catch

try {
  const page = browser.newPage();
  page.goto(url);
} catch (e) {
  if (/getting page frame tree/i.test(String(e))) {
    // transient init race — one retry on a fresh page usually succeeds
  }
}

Prevention

When it happens

Trigger: Renderer process crash while the frame tree is fetched, target detached mid-init during page close, or CDP session terminated by a remote browser/proxy. Most common on pages that navigate or die immediately after creation.

Common situations: Very short-lived pages (instant redirect then close), renderer crashes from heavy pages under memory pressure, and unstable remote browser connections.

Related errors


AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15). Data as JSON: /api/errors/53e32f274d9fb9a2. Report an issue: GitHub.