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
- Retry the operation (new page or goto) — these races are often transient at attach time
- Avoid creating pages that immediately self-close; add small delays or wait for a stable state after goto
- 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
- Avoid pages that navigate or close immediately after creation
- Add a selector/lifecycle wait after goto so init completes against a stable target
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
- adding k6 object to new browser context: %w
- got a nil page frame tree
- enabling page lifecycle events: %w
- adding script to evaluate on new document: %w
- WebSocket endpoint cannot be empty
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/53e32f274d9fb9a2.
Report an issue: GitHub.