Notification Test Guide
A reference for the DeskTest.net Notification Test. This tool answers a narrow, practical question: when an app tries to show a desktop notification, does one actually appear on this machine? It is the tool to reach for on the "my Teams alerts never pop up" or "browser notifications do nothing" ticket. Unlike the notification row in the Web App Readiness Test, which only reads the permission state, this tool requests permission and fires a real test notification end to end.
What does the Notification Test check?
Two steps that run when you click the button. No hardware, no plugin. Your browser may show a permission prompt; choose Allow.
- Notifications are supported. Confirms the
NotificationAPI exists in this browser and that the page is a secure (HTTPS) context, then reads the currentNotification.permission(granted,denied, ordefault). Kiosk shells and in-app webviews sometimes omit the API entirely. - Permission is granted and a test notification fires. Calls
Notification.requestPermission()- this is what triggers the browser prompt - and, if you allow it, constructs a realnew Notification('desktest.net test', ...)and shows it on your desktop. It confirms the notification was created without error and listens for the browser'sshowevent, then closes the notification automatically after a few seconds.
No network requests leave your browser. The only thing that leaves the page is the single desktop notification you asked for, which auto-closes. View source to verify.
desktest.net test) and no personal data, so it is safe to run on any workstation, including in front of a user on a ticket.When should I run this?
- "My Teams / Slack / browser alerts never pop up." The single most common notification ticket. Run this first to split the problem in two: if the test notification appears, notifications work at the browser and OS level and the issue is inside the specific app; if it does not, the block is at the browser or OS level and this tool tells you which.
- After a Windows or macOS update. Feature updates routinely re-enable Focus Assist / Do Not Disturb or reset per-app notification settings.
- Onboarding a workstation. Confirm the standard image lets the browser post notifications before a user depends on them for alerts.
- Validating a kiosk, locked-down, or VDI profile. Hardened profiles frequently block or omit notifications. Run this on the actual profile to see exactly what is off.
Reading the results
Each step gets a status badge: Pending, Running, Pass, Warn, or Fail. Warn and fail rows expand to show a detail dump and a numbered fix list.
The verdict panel at the top gives a one-line title, a likely cause, and a recommended next step. The three outcomes it distinguishes map directly to where the problem is: notifications work (a test notification was displayed), blocked in this browser (permission denied - re-allow it), or the OS is suppressing them (permission is granted but nothing showed - Focus Assist / Do Not Disturb, or a focused tab).
Copy Diagnostic Report writes a plain-text report to the clipboard: origin, secure-context flag, user agent, per-step status with a named diagnosis, the permission state after the request, whether the tab was focused, and whether the notification was created and confirmed shown. Paste it into a ticket.
The verdicts, and how to fix each
Every outcome produces a specific named diagnosis. Each maps to a fix.
notifications-unsupported: the API is missing
The Notification API is not present in this browser, or the page is not a secure context. There is nothing on the page to fix. Kiosk shells, in-app webviews (a browser embedded inside another app), and some stripped-down browser builds omit the API. Open the app in a full desktop browser - Chrome, Edge, Firefox, or Safari - over HTTPS, and run the test again.
notification-shown: notifications work (pass)
Permission is granted and the browser confirmed the test notification was displayed. Notifications work at the browser and OS level. If a specific app still does not alert you, the problem is inside that app: check that the app itself has notification permission (both in the app's own settings and in the OS per-app notification list), and that the OS is not in Do Not Disturb.
permission-denied: blocked in this browser (fail)
Permission is denied, so no notification can be shown. This is the "blocked in this browser" verdict. Re-allow it:
- Per-site. Click the icon at the left of the address bar (a lock, or a tune/sliders icon), open Site settings / Permissions, and set Notifications to Allow or Ask. Reload and run the test again.
- Browser-wide. If notifications are off globally: Chrome / Edge → Settings → Privacy and security → Site settings → Notifications; Firefox → Settings → Privacy & Security → Permissions → Notifications.
- OS level. Confirm the operating system lets the browser post notifications (Windows: Settings → System → Notifications; macOS: System Settings → Notifications).
permission-dismissed: no decision made (warn)
The permission is still at its default state - the prompt was dismissed or ignored, or the browser suppressed it (some browsers show a quieter prompt or stop asking after the prompt has been dismissed a few times). Run the test again and click Allow, or set Notifications to Allow from the address bar site settings first.
shown-unconfirmed: granted, but display not confirmed (warn)
Permission is granted and the notification was created without error, but the browser did not fire its show event within the test's wait window. If you saw the popup, notifications are working - some browsers (notably Firefox) never fire this internal signal even when the notification did appear, so this warning can be a false alarm. If you did not see it, the operating system is almost certainly suppressing it. See the next section.
fire-error: the notification could not be created (fail)
Permission is granted but constructing the notification threw an error. This usually means the OS is blocking notifications for the browser entirely, or a Focus / Do Not Disturb mode is fully suppressing them. Enable notifications for the browser in the OS settings, turn off Focus Assist / Do Not Disturb, and run the test again.
"Granted but nothing appeared": OS suppression
This is the case that trips people up. The browser has permission and posts the notification successfully, but no banner appears on screen. The browser has done its job; something below it is swallowing the popup. In order of likelihood:
- Windows Focus Assist / Do Not Disturb. Windows silences notification banners when Focus Assist (older builds) or Do Not Disturb (Windows 11) is on, sending them straight to the notification center instead. Turn it off: Settings → System → Notifications, and check the moon icon in the taskbar clock area. Priority-only rules and automatic schedules (during certain hours, while presenting, while gaming) can enable it without you noticing.
- macOS Do Not Disturb / Focus. A Focus mode in Control Center hides banners the same way. Turn off Do Not Disturb and any active Focus.
- The sending tab is focused. On several platforms the desktop banner is suppressed while the browser tab that sent it is in the foreground - the reasoning being that you are already looking at the page. Switch to another window and run the test again; if it appears then, this was the cause. The tool reports whether the tab was focused during the test.
- Banner style set to "none". Even with notifications allowed, the OS per-app setting can be set to show notifications only in the center, with no banner. Set the browser's notification style to Banners (Windows) or Banners/Alerts (macOS).
- Presentation / full-screen / game mode. Full-screen apps and presentation modes suppress notifications globally. Exit them and retest.
For IT admins
Notification failures split cleanly into three layers; fix the lowest one that is broken.
Browser permission. Chrome / Edge: DefaultNotificationsSetting (set to 2 = Ask, not 3 = Block), NotificationsAllowedForUrls, NotificationsBlockedForUrls. Firefox: the Permissions → Notifications policy with Allow / Block origin lists. Pin the app's origin to Allow so users never see a prompt.
OS notification settings. Notifications must be enabled for the browser at the OS level, above any per-site browser permission. On Windows this is Settings → System → Notifications and the per-app entry for the browser; via policy, the ToastEnabled and Focus Assist / Do Not Disturb settings are manageable through Group Policy / MDM. On macOS, the per-app notification allowance and banner style are in System Settings → Notifications and can be pushed via a configuration profile.
Focus Assist / Do Not Disturb. Automatic rules (during certain hours, while duplicating the display, while a full-screen app runs) enable suppression without user action and are the single most common "granted but nothing shows" cause on managed Windows fleets. Review the automatic-rules policy for the image.
Kiosk / VDI note. Locked-down profiles, in-app webviews, and some VDI browser stacks disable or omit notifications entirely. Run this tool on the actual profile the users get, not on your admin workstation, or the result will not match what they experience.
Behind the scenes
Gesture timing. Some browsers (Safari) only honor Notification.requestPermission() when it is called inside a user gesture. The tool therefore fires the request synchronously in the button's click handler, before any other asynchronous work, and consumes the result a moment later - the same pattern the Web App Readiness Test uses to open its popup inside the gesture. The request is normalized across the modern promise form and the legacy callback form.
Firing and confirming. On a granted permission the tool constructs new Notification('desktest.net test', { body, tag, requireInteraction:false }). It wires onshow (to confirm display), onerror (to catch a construct-time failure), and onclick (which focuses the window and closes the notification). It waits about 1.4 seconds for the show event, then reports; a missing show is treated as "not confirmed", never as a definite failure, because show is unreliable across browsers. The notification is closed automatically after a few seconds, and both timers and the notification object are torn down on Reset.
Nothing leaves the browser. All logic runs in JavaScript on the page. There are no network requests. The diagnostic report is plain text built in memory and copied to the clipboard via navigator.clipboard.writeText with a synthetic textarea fallback. The only external effect is the single OS notification you requested.
Related
- Notification Test - the diagnostic itself
- Web App Readiness Test Guide - reads notification permission (and popups, storage, clipboard) without prompting
- Browser Test Guide - checks browser version, secure context, and modern API support
- About DeskTest.net
- Help: getting started
- DeskTest.net home
Elsewhere on the web:
- MDN: Notifications API - the standard behind this tool, including permission and the
Notificationconstructor. - MDN: Notification.requestPermission() - the gesture and prompt behavior across browsers.