{"record":{"id":"5dfda8b2cc511126","repo":"grafana/k6","slug":"parsing-press-q-options-w","errorCode":null,"errorMessage":"parsing press %q options: %w","messagePattern":"parsing press %q options: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/element_handle_mapping.go","lineNumber":167,"sourceCode":"\t\t},\n\t\t\"isVisible\": func() *sobek.Promise {\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn eh.IsVisible() //nolint:wrapcheck\n\t\t\t})\n\t\t},\n\t\t\"ownerFrame\": func() *sobek.Promise {\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\tf, err := eh.OwnerFrame()\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\treturn mapFrame(vu, f), nil\n\t\t\t})\n\t\t},\n\t\t\"press\": func(key string, opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts := common.NewElementHandlePressOptions(eh.DefaultTimeout())\n\t\t\tif err := popts.Parse(vu.Context(), opts); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing press %q options: %w\", key, err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn nil, eh.Press(key, popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"screenshot\": func(opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts := common.NewElementHandleScreenshotOptions(eh.Timeout())\n\t\t\tif err := popts.Parse(vu.Context(), opts); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing element handle screenshot options: %w\", err)\n\t\t\t}\n\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\tbb, err := eh.Screenshot(popts, vu.filePersister)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err //nolint:wrapcheck\n\t\t\t\t}\n\n\t\t\t\tab := rt.NewArrayBuffer(bb)","sourceCodeStart":149,"sourceCodeEnd":185,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/browser/element_handle_mapping.go#L149-L185","documentation":"Thrown synchronously by ElementHandle.press() when its options fail to parse. ElementHandlePressOptions (delay, noWaitAfter, timeout) is parsed with lenient coercions only and always returns nil in common/element_handle_options.go, so this wrap is defensive and effectively unreachable in current k6. Note the key argument itself is separate: an invalid key name fails later inside the promise (keyboard layer), not here.","triggerScenarios":"In current code none: delay/timeout coerce via ToInteger, noWaitAfter via ToBoolean, unknown keys are ignored. Older structural Parse builds could fail on mismatched field types.","commonSituations":"Passing timeout as '5s' (coerced to 0, not an error) and mistaking the resulting immediate timeout for a parse failure; ported Playwright code using press with extra unsupported options that are silently ignored.","solutions":["Use { delay: <ms>, noWaitAfter: <bool>, timeout: <ms> } with numeric milliseconds","Verify the key string is a valid key name (e.g. 'Enter', 'ArrowDown', 'a') since invalid keys error later","Upgrade k6 if this message appears, then re-check with an empty options object","Inspect the wrapped cause after the colon for the actual failing field"],"exampleFix":"// before\nawait el.press('Enter', { timeout: '5s', delay: '100' });\n\n// after\nawait el.press('Enter', { timeout: 5000, delay: 100 });","handlingStrategy":"try-catch","validationCode":"if (opts) {\n  if (opts.timeout !== undefined && !Number.isFinite(Number(opts.timeout))) throw new Error('press(): timeout must be ms number');\n  if (opts.delay !== undefined && !Number.isFinite(Number(opts.delay))) throw new Error('press(): delay must be ms number');\n}\nconst VALID = /^(Enter|Tab|Escape|Arrow(Up|Down|Left|Right)|Control|Shift|Alt|Meta|[a-zA-Z0-9])$/;\nif (!VALID.test(key)) console.warn(`press(): unusual key name '${key}'`);","typeGuard":"function isPressOpts(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.press(key, opts);\n} catch (e) {\n  if (/parsing .* options/.test(String(e.message)) && e.message.includes(key)) {\n    console.log(`fix press options: ${e.message}`);\n  } else throw e; // invalid key names fail later inside the promise\n}","preventionTips":["Pass delay and timeout as numbers of milliseconds","An invalid key name does not fail option parsing; validate keys against the CDP key names you target","Current k6 cannot raise this parse error; treat it as a version-mismatch signal"],"tags":["k6","browser","element-handle","press","option-parsing"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}