{"record":{"id":"d93b4fb59dbc5556","repo":"grafana/k6","slug":"mouse-move-w","errorCode":null,"errorMessage":"mouse move: %w","messagePattern":"mouse move: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/mouse.go","lineNumber":138,"sourceCode":"\tif err := m.move(x, y, opts); err != nil {\n\t\treturn fmt.Errorf(\"moving the mouse pointer to x:%f y:%f: %w\", x, y, err)\n\t}\n\treturn nil\n}\n\nfunc (m *Mouse) move(x float64, y float64, opts *MouseMoveOptions) error {\n\tfromX := m.x\n\tfromY := m.y\n\tm.x = x\n\tm.y = y\n\tfor i := int64(1); i <= opts.Steps; i++ {\n\t\tx := fromX + (m.x-fromX)*float64(i/opts.Steps)\n\t\ty := fromY + (m.y-fromY)*float64(i/opts.Steps)\n\t\taction := input.DispatchMouseEvent(input.MouseMoved, x, y).\n\t\t\tWithButton(m.button).\n\t\t\tWithModifiers(input.Modifier(m.keyboard.modifiers))\n\t\tif err := action.Do(cdp.WithExecutor(m.ctx, m.session)); err != nil {\n\t\t\treturn fmt.Errorf(\"mouse move: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n","sourceCodeStart":120,"sourceCodeEnd":144,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/mouse.go#L120-L144","documentation":"Root-level error from the internal Mouse.move(): an individual CDP Input.dispatchMouseEvent(mouseMoved) call failed during the interpolation loop. It is a raw Chrome DevTools Protocol failure: the session or target disappeared (page closed, browser crashed, websocket dropped), not a problem with the coordinates.","triggerScenarios":"action.Do(cdp.WithExecutor(...)) for mouseMoved returning an error on any step: target destroyed, DevTools websocket closed, browser process crash or OOM kill mid-gesture.","commonSituations":"Chromium killed under memory pressure during long drag simulations; page closed while a multi-step move was in flight; flaky remote CDP connection; continuing after an earlier unhandled error left the session dead.","solutions":["Check that Chromium is alive and not OOM-killed (container logs, dmesg)","Guard the gesture: verify the page is open immediately before the move","Restart the full gesture on a freshly created page; mouse position is lost with the session","Reduce steps count to shrink the failure window"],"exampleFix":"// before\nawait page.mouse.move(800, 600, { steps: 40 });\n\n// after\nif (page.isClosed()) throw new Error('page closed before mouse.move');\nawait page.mouse.move(800, 600, { steps: 10 });","handlingStrategy":"try-catch","validationCode":"if (page.isClosed()) throw new Error('page closed');\nawait page.mouse.move(x, y, { steps: 5 });","typeGuard":null,"tryCatchPattern":"try {\n  await page.mouse.move(x, y, { steps: 5 });\n} catch (e) {\n  // raw CDP mouseMoved failure == session/target loss\n  if (/target closed|connection/i.test(e.message)) {\n    throw new Error('browser session lost during mouse move');\n  }\n  throw e;\n}","preventionTips":["Cap steps per move call","Check browser process health in CI between scenarios","Isolate gestures per page and drop state on failure"],"tags":["browser","cdp","mouse","protocol","crash"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}