{"record":{"id":"f90c43eb4ea511df","repo":"grafana/k6","slug":"mouse-down-w","errorCode":null,"errorMessage":"mouse down: %w","messagePattern":"mouse down: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/mouse.go","lineNumber":92,"sourceCode":"\treturn nil\n}\n\n// Down will trigger a MouseDown event in the browser.\nfunc (m *Mouse) Down(opts *MouseDownUpOptions) error {\n\tif err := m.down(opts); err != nil {\n\t\treturn fmt.Errorf(\"pressing the mouse button on x:%f y:%f: %w\", m.x, m.y, err)\n\t}\n\treturn nil\n}\n\nfunc (m *Mouse) down(opts *MouseDownUpOptions) error {\n\tm.button = input.MouseButton(opts.Button)\n\taction := input.DispatchMouseEvent(input.MousePressed, m.x, m.y).\n\t\tWithButton(input.MouseButton(opts.Button)).\n\t\tWithModifiers(input.Modifier(m.keyboard.modifiers)).\n\t\tWithClickCount(opts.ClickCount)\n\tif err := action.Do(cdp.WithExecutor(m.ctx, m.session)); err != nil {\n\t\treturn fmt.Errorf(\"mouse down: %w\", err)\n\t}\n\treturn nil\n}\n\n// Up will trigger a MouseUp event in the browser.\nfunc (m *Mouse) Up(opts *MouseDownUpOptions) error {\n\tif err := m.up(opts); err != nil {\n\t\treturn fmt.Errorf(\"releasing the mouse button on x:%f y:%f: %w\", m.x, m.y, err)\n\t}\n\treturn nil\n}\n\nfunc (m *Mouse) up(opts *MouseDownUpOptions) error {\n\tm.button = input.None\n\taction := input.DispatchMouseEvent(input.MouseReleased, m.x, m.y).\n\t\tWithButton(input.MouseButton(opts.Button)).\n\t\tWithModifiers(input.Modifier(m.keyboard.modifiers)).\n\t\tWithClickCount(opts.ClickCount)","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/mouse.go#L74-L110","documentation":"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.","triggerScenarios":"action.Do(cdp.WithExecutor(...)) for mousePressed returning an error: DevTools session closed, target (page) destroyed, browser process crash, or websocket to the browser dropped.","commonSituations":"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).","solutions":["Check browser health: verify the Chromium process is alive and not OOM-killed (dmesg/container logs)","Guard all mouse input with page.isClosed() and re-create the page on failure","Reduce concurrent VUs/pages if the browser runs out of resources","If using a remote/external browser (K6_BROWSER_EXECUTABLE_PATH or websocket endpoint), verify connectivity and version compatibility"],"exampleFix":"// before\nawait page.mouse.down();\n\n// after\nif (page.isClosed()) { throw new Error('page closed before mouse.down'); }\nawait page.mouse.down();","handlingStrategy":"try-catch","validationCode":"if (page.isClosed()) throw new Error('page closed');\nawait page.mouse.down();","typeGuard":null,"tryCatchPattern":"try {\n  await page.mouse.down();\n} catch (e) {\n  // raw CDP failure: treat as fatal session loss\n  if (/target closed|connection|context destroyed/i.test(e.message)) {\n    throw new Error('browser session lost during mouse down');\n  }\n  throw e;\n}","preventionTips":["Monitor Chromium memory in long browser tests","Never dispatch input after a prior unhandled error","Run one gesture at a time per page"],"tags":["browser","cdp","mouse","protocol","crash"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}