{"record":{"id":"4881e9bef05382a1","repo":"grafana/k6","slug":"parsing-type-options-w","errorCode":null,"errorMessage":"parsing type options: %w","messagePattern":"parsing type options: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/element_handle_mapping.go","lineNumber":267,"sourceCode":"\t\t\t\treturn nil, eh.Tap(popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"textContent\": func() *sobek.Promise {\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\ts, ok, err := eh.TextContent()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err //nolint:wrapcheck\n\t\t\t\t}\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, nil\n\t\t\t\t}\n\t\t\t\treturn s, nil\n\t\t\t})\n\t\t},\n\t\t\"type\": func(text string, opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts := common.NewElementHandleTypeOptions(eh.DefaultTimeout())\n\t\t\tif err := popts.Parse(vu.Context(), opts); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing type options: %w\", err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn nil, eh.Type(text, popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"uncheck\": func(opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts := common.NewElementHandleSetCheckedOptions(eh.DefaultTimeout())\n\t\t\tif err := popts.Parse(vu.Context(), opts); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing uncheck options: %w\", err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn nil, eh.Uncheck(popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"waitForElementState\": func(state string, opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts := common.NewElementHandleWaitForElementStateOptions(eh.DefaultTimeout())\n\t\t\tif err := popts.Parse(vu.Context(), opts); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing waitForElementState options: %w\", err)","sourceCodeStart":249,"sourceCodeEnd":285,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/browser/element_handle_mapping.go#L249-L285","documentation":"Thrown synchronously by ElementHandle.type() when its options fail to parse. ElementHandleTypeOptions (delay, noWaitAfter, timeout) is parsed with lenient coercions only in common/element_handle_options.go and always returns nil, so this wrap is defensive and effectively unreachable in current k6. The text argument is typed and cannot cause this error.","triggerScenarios":"In current code none: delay/noWaitAfter/timeout coerce any value; unknown keys are ignored. Old xk6-browser builds with structural parsing could fail on mismatched field types.","commonSituations":"Passing delay/timeout as strings ('100'), which coerce to numbers rather than erroring; Playwright ports carrying unsupported keys that are silently ignored.","solutions":["Use { delay: <ms number>, noWaitAfter: <bool>, timeout: <ms number> }","Prefer el.fill() for setting whole values; use type() only to exercise per-key events","Upgrade k6 if this message appears and retest with an empty options object","Read the wrapped cause after the colon for the failing field"],"exampleFix":"// before\nawait el.type('hello', { delay: '100', timeout: '5s' });\n\n// after\nawait el.type('hello', { delay: 100, timeout: 5000 });","handlingStrategy":"try-catch","validationCode":"if (opts) {\n  if (opts.delay !== undefined && !Number.isFinite(Number(opts.delay))) throw new Error('type(): delay must be ms number');\n  if (opts.timeout !== undefined && !Number.isFinite(Number(opts.timeout))) throw new Error('type(): timeout must be ms number');\n}\nconst ALLOWED = new Set(['delay', 'noWaitAfter', 'timeout']);\nconst bad = Object.keys(opts || {}).filter(k => !ALLOWED.has(k));\nif (bad.length) console.warn(`type(): unsupported options ignored: ${bad.join(', ')}`);","typeGuard":"function isTypeOpts(o) {\n  if (o == null) return true;\n  return (o.delay === undefined || Number.isFinite(o.delay)) &&\n         (o.noWaitAfter === undefined || typeof o.noWaitAfter === 'boolean') &&\n         (o.timeout === undefined || Number.isFinite(o.timeout));\n}","tryCatchPattern":"try {\n  await el.type(text, opts);\n} catch (e) {\n  if (/parsing type options/.test(String(e.message))) {\n    console.log(`fix type options: ${e.message}`);\n  } else throw e;\n}","preventionTips":["delay and timeout are millisecond numbers; strings coerce silently to wrong values","Prefer fill() for whole-value input; keep type() for per-keypress event simulation","Current k6 cannot raise this parse error; occurrence signals an old binary or regression"],"tags":["k6","browser","element-handle","type","option-parsing"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}