{"record":{"id":"71ab7e58d2186866","repo":"grafana/k6","slug":"unknown-page-on-event-q","errorCode":null,"errorMessage":"unknown page on event: %q","messagePattern":"unknown page on event: %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/browser/page_mapping.go","lineNumber":793,"sourceCode":"\treturn func(eventName common.PageEventName, handle sobek.Callable) error {\n\t\tif handle == nil {\n\t\t\tpanic(vu.Runtime().NewTypeError(`The \"listener\" argument must be a function`))\n\t\t}\n\n\t\tpageEvents := map[common.PageEventName]struct {\n\t\t\tmapp func(vu moduleVU, event common.PageEvent) mapping\n\t\t\twait bool // Whether to wait for the handler to complete.\n\t\t}{\n\t\t\tcommon.PageEventConsole:         {mapp: mapConsoleMessage},\n\t\t\tcommon.PageEventMetric:          {mapp: mapMetricEvent, wait: true},\n\t\t\tcommon.PageEventRequest:         {mapp: mapRequestEvent},\n\t\t\tcommon.PageEventResponse:        {mapp: mapResponseEvent},\n\t\t\tcommon.PageEventRequestFinished: {mapp: mapRequestEvent},\n\t\t\tcommon.PageEventRequestFailed:   {mapp: mapRequestEvent},\n\t\t}\n\t\tpageEvent, ok := pageEvents[eventName]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unknown page on event: %q\", eventName)\n\t\t}\n\n\t\tctx := vu.Context()\n\t\ttq := vu.get(ctx, p.TargetID())\n\n\t\treturn p.On(eventName, func(event common.PageEvent) error {\n\t\t\twait := queueTask(ctx, tq, func() (sobek.Value, error) {\n\t\t\t\t_, err := handle(sobek.Undefined(), vu.Runtime().ToValue(pageEvent.mapp(vu, event)))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"executing page.on('%s') handler: %w\", eventName, err)\n\t\t\t\t}\n\t\t\t\treturn nil, nil\n\t\t\t})\n\t\t\tif pageEvent.wait {\n\t\t\t\tif _, err := wait(); errors.Is(err, context.Canceled) {\n\t\t\t\t\treturn errors.New(\"iteration ended before page.on handler completed executing\")\n\t\t\t\t}\n\t\t\t}","sourceCodeStart":775,"sourceCodeEnd":811,"githubUrl":"https://github.com/grafana/k6/blob/8d06114777191d21ef885d05c5f8aa9e1ed838ae/internal/js/modules/k6/browser/browser/page_mapping.go#L775-L811","documentation":"Returned by page.on(eventName, handler) when eventName is not in the supported pageEvents map. k6 maps exactly six page events: 'console', 'metric', 'request', 'response', 'requestfinished', 'requestfailed'. Registering any other Playwright page event name fails synchronously when page.on is called.","triggerScenarios":"page.on('pageerror', ...), page.on('load', ...), page.on('dialog', ...), page.on('popup', ...), page.on('close', ...), or any misspelled event like 'requestFinished' (case-sensitive: the mapped name is 'requestfinished').","commonSituations":"Porting Playwright scripts that register common listeners; case mismatches ('requestFinished' vs 'requestfinished'); expecting dialog or download handling that the k6 browser module does not expose.","solutions":["Use one of the six supported names, all lowercase: 'console', 'metric', 'request', 'response', 'requestfinished', 'requestfailed'.","For load-state concerns use page.waitForLoadState(); for popups use context.waitForEvent('page'); for dialogs there is no support — avoid triggering them.","Check exact spelling/casing against the k6 browser API docs before registering.","Register handlers once at the top of the default export to avoid duplicating listeners each iteration."],"exampleFix":"// before\npage.on('requestFinished', r => console.log(r.url()));\n\n// after\npage.on('requestfinished', r => console.log(r.url()));","handlingStrategy":"validation","validationCode":"const PAGE_ON_EVENTS = ['console', 'metric', 'request', 'response', 'requestfinished', 'requestfailed'];\nfunction onPage(page, name, handler) {\n  if (!PAGE_ON_EVENTS.includes(name)) throw new Error(`page.on does not support '${name}'`);\n  return page.on(name, handler);\n}","typeGuard":"const isSupportedPageOnEvent = (n) => ['console','metric','request','response','requestfinished','requestfailed'].includes(n);","tryCatchPattern":null,"preventionTips":["Register listeners through a wrapper that validates the event name against the supported list.","Remember event names are lowercase ('requestfinished', not 'requestFinished').","During Playwright porting, replace page.on('pageerror'/'load') with supported equivalents."],"tags":["k6","browser","page","event-listener","unsupported-feature"],"backgroundTag":"unsupported-event-name","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"}