diff --git a/packages/playwright-core/src/server/webkit/wkPage.ts b/packages/playwright-core/src/server/webkit/wkPage.ts index 24d6ef63f6..d3a95fec70 100644 --- a/packages/playwright-core/src/server/webkit/wkPage.ts +++ b/packages/playwright-core/src/server/webkit/wkPage.ts @@ -786,7 +786,7 @@ export class WKPage implements PageDelegate { scripts.push('delete window.ondevicemotion'); scripts.push('delete window.ondeviceorientation'); } - scripts.push('if (!window.safari) window.safari = {};'); + scripts.push('if (!window.safari) window.safari = { pushNotification: { toString() { return "[object SafariRemoteNotification]"; } } };'); scripts.push('if (!window.GestureEvent) window.GestureEvent = function GestureEvent() {};'); for (const binding of this._page.allBindings()) diff --git a/tests/library/capabilities.spec.ts b/tests/library/capabilities.spec.ts index c5112f3246..40db91fdfa 100644 --- a/tests/library/capabilities.spec.ts +++ b/tests/library/capabilities.spec.ts @@ -212,10 +212,13 @@ it('serviceWorker should intercept document request', async ({ page, server }) = it('webkit should define window.safari', async ({ page, server, browserName }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/21037' }); + it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29032' }); it.skip(browserName !== 'webkit'); await page.goto(server.EMPTY_PAGE); const defined = await page.evaluate(() => !!(window as any).safari); expect(defined).toBeTruthy(); + expect(await page.evaluate(() => typeof (window as any).safari.pushNotification)).toBe('object'); + expect(await page.evaluate(() => (window as any).safari.pushNotification.toString())).toBe('[object SafariRemoteNotification]'); }); it('make sure that XMLHttpRequest upload events are emitted correctly', async ({ page, server }) => {