diff --git a/packages/playwright-core/src/client/joiningEventEmitter.ts b/packages/playwright-core/src/client/joiningEventEmitter.ts index ee916da8c5..8cc4d6346a 100644 --- a/packages/playwright-core/src/client/joiningEventEmitter.ts +++ b/packages/playwright-core/src/client/joiningEventEmitter.ts @@ -119,7 +119,8 @@ export class JoiningEventEmitter implements EventEmitter { } private _wrapper(listener: (...args: any[]) => void) { - return (listener as any)[wrapperListener]; + // Fallback to original listener if not wrapped to ensure backwards compatibility Node.js's event emitter + return (listener as any)[wrapperListener] ?? listener; } private _original(wrapper: Function): Function { diff --git a/tests/page/page-event-pageerror.spec.ts b/tests/page/page-event-pageerror.spec.ts index d50a3cb935..ea56f63f98 100644 --- a/tests/page/page-event-pageerror.spec.ts +++ b/tests/page/page-event-pageerror.spec.ts @@ -128,3 +128,7 @@ it('should handle window', async ({ page, browserName, isElectron }) => { ]); expect(error.message).toBe(browserName === 'chromium' ? 'Window' : '[object Window]'); }); + +it('should remove a listener of a non-existing event handler', async ({ page }) => { + page.removeListener('pageerror', () => {}); +});