{"record":{"id":"213e2ebc15124306","repo":"grafana/k6","slug":"executing-waitforevent-predicate-w","errorCode":null,"errorMessage":"executing waitForEvent predicate: %w","messagePattern":"executing waitForEvent predicate: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/page_mapping.go","lineNumber":716,"sourceCode":"\t\t\t\treturn nil, fmt.Errorf(\"parsing waitForEvent options: %w\", err)\n\t\t\t}\n\n\t\t\tctx := vu.Context()\n\t\t\ttq := vu.get(ctx, p.TargetID())\n\n\t\t\treturn promise(vu, func() (any, error) {\n\t\t\t\trpe, err := p.WaitForEvent(event, popts, func(pe common.PageEvent) (bool, error) {\n\t\t\t\t\tif fn == nil {\n\t\t\t\t\t\treturn true, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn queueTask(ctx, tq, func() (bool, error) {\n\t\t\t\t\t\tm, err := mapPageEvent(vu, pe)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn false, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv, err := fn(sobek.Undefined(), vu.Runtime().ToValue(m))\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn false, fmt.Errorf(\"executing waitForEvent predicate: %w\", err)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn v.ToBoolean(), nil\n\t\t\t\t\t})()\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"waiting for page event %q: %w\", event, err)\n\t\t\t\t}\n\t\t\t\treturn mapPageEvent(vu, rpe)\n\t\t\t}), nil\n\t\t},\n\t\t\"workers\": func() *sobek.Object {\n\t\t\tworkers := p.Workers()\n\t\t\tmws := make([]mapping, 0, len(workers))\n\t\t\tfor _, w := range workers {\n\t\t\t\tmw := mapWorker(vu, w)\n\t\t\t\tmws = append(mws, mw)\n\t\t\t}\n\t\t\treturn rt.ToValue(mws).ToObject(rt)","sourceCodeStart":698,"sourceCodeEnd":734,"githubUrl":"https://github.com/grafana/k6/blob/8d06114777191d21ef885d05c5f8aa9e1ed838ae/internal/js/modules/k6/browser/browser/page_mapping.go#L698-L734","documentation":"Thrown while page.waitForEvent(..., { predicate }) is running: the JavaScript predicate function itself raised an exception when called with the mapped page event. The mapping layer executes the predicate on the Sobek runtime inside the task queue; any throw is wrapped with this message and aborts the wait.","triggerScenarios":"A predicate that accesses properties not present on the event object (e.g. e.response().status() when the request has no response yet, or using fields of a ConsoleMessage where a Request was delivered); calling a non-existent method; referencing an undefined variable inside the predicate.","commonSituations":"Predicates written for one event type reused for another (a Request predicate passed while waiting for 'console'); calling e.response() without a null check on requestfailed events; assuming Playwright's full event API surface exists on the mapped k6 object.","solutions":["Wrap the predicate body in try/catch and return false on failure so one bad event does not kill the wait.","Null-check optional accessors before use: if (!e.response()) return false;.","Verify every method called on the event exists in the k6 browser API mapping (Request, Response, ConsoleMessage).","Log the event inside the predicate during debugging to see which shape is actually delivered."],"exampleFix":"// before\nawait page.waitForEvent('response', { predicate: r => r.request().method() === 'GET' && r.status() === 200 });\n\n// after\nawait page.waitForEvent('response', {\n  predicate: r => {\n    try { return r.request().method() === 'GET' && r.status() === 200; }\n    catch { return false; }\n  },\n});","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"await page.waitForEvent('response', {\n  predicate: (e) => {\n    try { return e.url().includes('/api') && e.status() < 400; }\n    catch { return false; } // skip events whose shape we can't inspect\n  },\n});","preventionTips":["Wrap every waitForEvent predicate body in try/catch returning false.","Null-check optional accessors (response(), request()) before use.","Unit-test predicates against sample mapped event objects before running the load test."],"tags":["k6","browser","page","waitforevent","predicate","callback-error"],"backgroundTag":"runtime-error-in-callback","analyzedSha":"8d06114777191d21ef885d05c5f8aa9e1ed838ae","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":"2026-08-18T03:05:52.393Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}