grafana/k6 · error

getting page title: %w

Error message

getting page title: %w

What it means

Page.Title evaluates () => document.title in the main frame; this error wraps an evaluation failure, meaning the expression could not run: execution context destroyed by navigation, page closing, or renderer crash. The title value itself is irrelevant — the call to evaluate failed.

Source

Thrown at internal/js/modules/k6/browser/common/page.go:1790

	p.logger.Debugf("Page:TextContent", "sid:%v selector:%s", p.sessionID(), selector)

	return p.MainFrame().TextContent(selector, popts)
}

// Timeout will return the default timeout or the one set by the user.
// It's an internal method not to be exposed as a JS API.
func (p *Page) Timeout() time.Duration {
	return p.defaultTimeout()
}

// Title returns the page title.
func (p *Page) Title() (string, error) {
	p.logger.Debugf("Page:Title", "sid:%v", p.sessionID())

	js := `() => document.title`
	v, err := p.Evaluate(js)
	if err != nil {
		return "", fmt.Errorf("getting page title: %w", err)
	}
	s, ok := v.(string)
	if !ok {
		return "", fmt.Errorf("getting page title: expected string, got %T", v)
	}

	return s, nil
}

// ThrottleCPU will slow the CPU down from chrome's perspective to simulate
// a test being run on a slower device.
func (p *Page) ThrottleCPU(cpuProfile CPUProfile) error {
	p.logger.Debugf("Page:ThrottleCPU", "sid:%v", p.sessionID())

	p.frameSessionsMu.RLock()
	defer p.frameSessionsMu.RUnlock()

	for _, fs := range p.frameSessions {

View on GitHub (pinned to 93accf6570)

Solutions

  1. Await a load state first: await page.waitForLoadState() before page.title()
  2. Retry once after a short delay — a fresh execution context usually resolves it
  3. Ensure the page is not closing when reading the title

Example fix

// before
await page.goto('https://example.com/');
const t = await page.title(); // may race redirect/context swap

// after
await page.goto('https://example.com/');
await page.waitForLoadState('domcontentloaded');
const t = await page.title();
Defensive patterns

Strategy: retry

Validate before calling

if (page.isClosed()) throw new Error('page closed before title read');
await page.waitForLoadState('domcontentloaded');

Try / catch

let title;
for (let i = 0; i < 2; i++) {
  try { title = await page.title(); break; }
  catch (e) { if (!/getting page title/.test(e.message)) throw e; await page.waitForTimeout(200); }
}

Prevention

When it happens

Trigger: page.title() during page.goto (context torn down and recreated), on an about:blank page being replaced, or after the page/renderer died.

Common situations: Calling page.title() immediately after goto without awaiting load; racing a redirect chain; calling at iteration teardown.

Related errors


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