grafana/k6 · error

mouse down: %w

Error message

mouse down: %w

What it means

Root-level error from the internal Mouse.down(): the CDP Input.dispatchMouseEvent(mousePressed) call itself failed. This is a raw Chrome DevTools Protocol failure, typically meaning the session/target is gone (page closed, browser crashed, connection lost) rather than anything about coordinates or the page content.

Source

Thrown at internal/js/modules/k6/browser/common/mouse.go:92

	return nil
}

// Down will trigger a MouseDown event in the browser.
func (m *Mouse) Down(opts *MouseDownUpOptions) error {
	if err := m.down(opts); err != nil {
		return fmt.Errorf("pressing the mouse button on x:%f y:%f: %w", m.x, m.y, err)
	}
	return nil
}

func (m *Mouse) down(opts *MouseDownUpOptions) error {
	m.button = input.MouseButton(opts.Button)
	action := input.DispatchMouseEvent(input.MousePressed, m.x, m.y).
		WithButton(input.MouseButton(opts.Button)).
		WithModifiers(input.Modifier(m.keyboard.modifiers)).
		WithClickCount(opts.ClickCount)
	if err := action.Do(cdp.WithExecutor(m.ctx, m.session)); err != nil {
		return fmt.Errorf("mouse down: %w", err)
	}
	return nil
}

// Up will trigger a MouseUp event in the browser.
func (m *Mouse) Up(opts *MouseDownUpOptions) error {
	if err := m.up(opts); err != nil {
		return fmt.Errorf("releasing the mouse button on x:%f y:%f: %w", m.x, m.y, err)
	}
	return nil
}

func (m *Mouse) up(opts *MouseDownUpOptions) error {
	m.button = input.None
	action := input.DispatchMouseEvent(input.MouseReleased, m.x, m.y).
		WithButton(input.MouseButton(opts.Button)).
		WithModifiers(input.Modifier(m.keyboard.modifiers)).
		WithClickCount(opts.ClickCount)

View on GitHub (pinned to 93accf6570)

Solutions

  1. Check browser health: verify the Chromium process is alive and not OOM-killed (dmesg/container logs)
  2. Guard all mouse input with page.isClosed() and re-create the page on failure
  3. Reduce concurrent VUs/pages if the browser runs out of resources
  4. If using a remote/external browser (K6_BROWSER_EXECUTABLE_PATH or websocket endpoint), verify connectivity and version compatibility

Example fix

// before
await page.mouse.down();

// after
if (page.isClosed()) { throw new Error('page closed before mouse.down'); }
await page.mouse.down();
Defensive patterns

Strategy: try-catch

Validate before calling

if (page.isClosed()) throw new Error('page closed');
await page.mouse.down();

Try / catch

try {
  await page.mouse.down();
} catch (e) {
  // raw CDP failure: treat as fatal session loss
  if (/target closed|connection|context destroyed/i.test(e.message)) {
    throw new Error('browser session lost during mouse down');
  }
  throw e;
}

Prevention

When it happens

Trigger: action.Do(cdp.WithExecutor(...)) for mousePressed returning an error: DevTools session closed, target (page) destroyed, browser process crash, or websocket to the browser dropped.

Common situations: Browser crashed under load (many VUs, out of memory); test continuing to interact after page.close(); containerized Chromium killed by OOM; network hiccup between k6 and a remote browser (CDP over websocket).

Related errors


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