{"record":{"id":"3759b02d88add49e","repo":"grafana/k6","slug":"clickcount-must-be-an-integer-got-s","errorCode":null,"errorMessage":"clickCount must be an integer, got %s","messagePattern":"clickCount must be an integer, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/mouse_mapping.go","lineNumber":82,"sourceCode":"// parseMouseClickOptions parses the mouse click options from a Sobek value.\nfunc parseMouseClickOptions(rt *sobek.Runtime, opts sobek.Value) (*common.MouseClickOptions, error) {\n\tpopts := common.NewMouseClickOptions()\n\tif k6common.IsNullish(opts) {\n\t\treturn popts, nil\n\t}\n\n\tobj := opts.ToObject(rt)\n\tfor _, k := range obj.Keys() {\n\t\tv := obj.Get(k)\n\t\tswitch k {\n\t\tcase \"button\":\n\t\t\tpopts.Button = v.String()\n\t\tcase \"clickCount\":\n\t\t\tswitch v.ExportType().Kind() {\n\t\t\tcase reflect.Int64:\n\t\t\t\tpopts.ClickCount = v.ToInteger()\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"clickCount must be an integer, got %s\", v.ExportType().Kind())\n\t\t\t}\n\t\tcase \"delay\":\n\t\t\tswitch v.ExportType().Kind() {\n\t\t\tcase reflect.Int64:\n\t\t\t\tpopts.Delay = v.ToInteger()\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"delay must be an integer, got %s\", v.ExportType().Kind())\n\t\t\t}\n\t\t}\n\t}\n\n\treturn popts, nil\n}\n\n// parseMouseDblClickOptions parses the mouse double click options from a Sobek value.\nfunc parseMouseDblClickOptions(rt *sobek.Runtime, opts sobek.Value) (*common.MouseDblClickOptions, error) {\n\tpopts := common.NewMouseDblClickOptions()\n\tif k6common.IsNullish(opts) {","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/grafana/k6/blob/01ffac6f245854c1b8adc6a69857c76a15f90022/internal/js/modules/k6/browser/browser/mouse_mapping.go#L64-L100","documentation":"Thrown by parseMouseClickOptions (browser/mouse_mapping.go:82) when mouse.click receives a 'clickCount' option whose Sobek export kind is not Int64. The parser checks v.ExportType().Kind() and only accepts integers; strings ('2'), floats (1.5), booleans, and null all fall to the default branch and report the offending kind in the message.","triggerScenarios":"page.mouse().click(10, 20, { clickCount: '2' }), { clickCount: 1.5 }, or { clickCount: true }. Note: 2.0 written literally usually exports as int64 and passes; the failure is with genuinely non-integer-typed values.","commonSituations":"Click counts driven by scenario data (CSV/JSON) where numbers arrive as strings; triple-click helpers parameterized by a count variable; options spread from a shared config object typed loosely.","solutions":["Pass an integer literal: { clickCount: 2 }.","Coerce data-driven counts: { clickCount: parseInt(cfg.clickCount, 10) }.","Validate with Number.isInteger before the call and fail with a clear message.","Omit clickCount for a single click."],"exampleFix":"// before\nawait page.mouse().click(10, 20, { clickCount: cfg.clicks }); // \"2\"\n\n// after\nawait page.mouse().click(10, 20, { clickCount: parseInt(cfg.clicks, 10) });","handlingStrategy":"type-guard","validationCode":"if (opts?.clickCount != null && !Number.isInteger(opts.clickCount)) throw new Error(`clickCount must be an integer, got ${typeof opts.clickCount}`);\nawait page.mouse().click(x, y, opts);","typeGuard":"function isIntegerOption(o, key) {\n  return o == null || o[key] == null || Number.isInteger(o[key]);\n}","tryCatchPattern":"try { await page.mouse().click(x, y, opts); } catch (e) { if (/clickCount must be an integer/.test(e.message)) { await page.mouse().click(x, y, { ...opts, clickCount: parseInt(opts.clickCount, 10) }); } else throw e; }","preventionTips":["Always pass clickCount as an integer literal.","parseInt data-driven counts at load time.","Type mouse options in TypeScript ({ clickCount?: number }) to catch strings early."],"tags":["k6","browser","mouse","click-count","integer-validation"],"backgroundTag":"invalid-options-argument","analyzedSha":"01ffac6f245854c1b8adc6a69857c76a15f90022","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":"2026-08-18T03:05:52.393Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}