{"record":{"id":"79a7d4cf5a2e5f91","repo":"grafana/k6","slug":"parsing-setinputfiles-parameter-w","errorCode":null,"errorMessage":"parsing setInputFiles parameter: %w","messagePattern":"parsing setInputFiles parameter: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/element_handle_mapping.go","lineNumber":244,"sourceCode":"\t\t\t}), nil\n\t\t},\n\t\t\"setChecked\": func(checked bool, opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts, err := parseElementHandleSetCheckedOptions(rt, opts, eh.DefaultTimeout())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing setChecked options: %w\", err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn nil, eh.SetChecked(checked, popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"setInputFiles\": func(files sobek.Value, opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts, err := parseElementHandleSetInputFilesOptions(rt, opts, eh.DefaultTimeout())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing setInputFiles options: %w\", err)\n\t\t\t}\n\t\t\tvar pfiles common.Files\n\t\t\tif err := pfiles.Parse(vu.Context(), files); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing setInputFiles parameter: %w\", err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\treturn nil, eh.SetInputFiles(&pfiles, popts) //nolint:wrapcheck\n\t\t\t}), nil\n\t\t},\n\t\t\"tap\": func(opts sobek.Value) (*sobek.Promise, error) {\n\t\t\tpopts, err := parseElementHandleTapOptions(rt, opts, eh.Timeout())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing element tap options: %w\", err)\n\t\t\t}\n\t\t\treturn promise(vu, func() (any, error) {\n\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 {","sourceCodeStart":226,"sourceCodeEnd":262,"githubUrl":"https://github.com/grafana/k6/blob/3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee/internal/js/modules/k6/browser/browser/element_handle_mapping.go#L226-L262","documentation":"Thrown when the files argument of ElementHandle.setInputFiles fails Files.Parse. The k6 browser module accepts only file descriptor objects {name, mimeType, buffer} (buffer is a base64 string) or arrays of them — unlike Playwright, plain file paths and strings are rejected with the wrapped error 'invalid parameter type : string', and a malformed object yields 'parsing file descriptor: ...'. This is the most common setInputFiles failure.","triggerScenarios":"setInputFiles('/uploads/avatar.png') (string path — unsupported), setInputFiles(42), setInputFiles([{name: 'a.png'}]) with wrong/missing field types, or an array mixing strings and objects.","commonSituations":"Copying Playwright test code where setInputFiles('/path/to/file.pdf') is idiomatic; assuming k6 can read local files by path; passing a Buffer/ArrayBuffer instead of a base64 string for the buffer field.","solutions":["Pass a descriptor object: setInputFiles({name: 'avatar.png', mimeType: 'image/png', buffer: '<base64>'})","For multiple files pass an array of descriptor objects","To use local file contents, load them as base64 in the script and put the base64 string in buffer — the module does not read paths from disk"],"exampleFix":"// before (Playwright style — not supported by k6)\nawait handle.setInputFiles('/uploads/avatar.png');\n// after\nawait handle.setInputFiles({\n  name: 'avatar.png',\n  mimeType: 'image/png',\n  buffer: 'iVBORw0KGgoAAAANSUhEUg...', // base64 string\n});","handlingStrategy":"type-guard","validationCode":"function isFileDescriptor(v) {\n  return typeof v?.name === 'string' && typeof v?.buffer === 'string';\n}\nconst arr = Array.isArray(files) ? files : [files];\nif (files != null && !arr.every(isFileDescriptor)) {\n  throw new Error('setInputFiles requires {name, mimeType, buffer(base64)} objects, not paths');\n}\nawait handle.setInputFiles(files);","typeGuard":"function isFileDescriptor(v) {\n  return v != null && typeof v === 'object' && !Array.isArray(v) &&\n    typeof v.name === 'string' && typeof v.mimeType === 'string' &&\n    typeof v.buffer === 'string';\n}\nfunction isInputFilesArg(v) {\n  return v == null || isFileDescriptor(v) || (Array.isArray(v) && v.every(isFileDescriptor));\n}","tryCatchPattern":"try {\n  await handle.setInputFiles(files);\n} catch (e) {\n  if (String(e).includes('setInputFiles parameter')) {\n    // a path string slipped in; convert it to a descriptor before retrying\n    throw new Error('k6 setInputFiles does not accept file paths; pass {name, mimeType, buffer}');\n  }\n  throw e;\n}","preventionTips":["Never port Playwright setInputFiles('/path') calls verbatim — k6 has no path support","Encode file payloads as base64 strings in the buffer field","Wrap file arguments in a descriptor factory so every call site is shape-checked once"],"tags":["k6","browser","element-handle","setinputfiles","file-upload","argument-type"],"backgroundTag":"invalid-argument-value","analyzedSha":"3fcf5388d78cb382f0c0d42ec556a06bfd1b8dee","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":"2026-08-18T03:05:52.393Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}