Date Picker Testing Checklist (2026)
Date Picker Testing Checklist (2026) provides a concrete, step‑by‑step matrix you can apply to any UI component that lets users choose a date. Use it to verify that the picker works correctly under no
Date Picker Testing Checklist (2026) provides a concrete, step‑by‑step matrix you can apply to any UI component that lets users choose a date. Use it to verify that the picker works correctly under normal use, fails gracefully when given bad input, handles edge cases that only appear in production, meets accessibility standards, does not introduce security or privacy risks, performs acceptably across devices, and is ready for release with reliable regression coverage. The checklist is organized into logical areas, each with pass/fail criteria, real‑world examples, and guidance on both manual and automated execution. Later sections show how an autonomous QA platform such as SUSATest can cover most of these items in a single pass, generating regression scripts automatically.
Date Picker Testing Checklist (2026): Overview and Goals
A date picker is deceptively simple: a user taps or clicks a field, a calendar pops up, they select a day, month, and year, and the value is returned. Yet the component touches many system boundaries—locale, timezone, calendar system, input validation, assistive technology, and rendering performance. The goal of this checklist is to give you a repeatable, auditable set of observations that can be ticked off during exploratory testing, added to a test case management tool, or turned into automated assertions.
The checklist is divided into eight primary areas, each with sub‑items that map to specific tester actions. For each item we state:
- What to do – the exact interaction or inspection.
- Pass criteria – the observable outcome that indicates success.
- Fail signal – the defect symptom that should be logged.
- Example – a concrete scenario drawn from real products.
- Automation hint – a short note on how to encode the check in code (Appium, Playwright, or similar).
By following the matrix you will catch the majority of defects that escape unit tests and only surface during integration or user‑acceptance testing.
Date Picker Testing Checklist (2026): Happy Path Testing
Happy‑path testing confirms that the picker behaves as expected when users follow the intended workflow. Even though these scenarios seem trivial, they often reveal bugs in state management, event handling, or UI synchronization.
Basic Selection
- What to do – Open the picker, select today’s date, close the picker, and verify the field shows the selected date in the expected format (e.g.,
YYYY‑MM‑DD). - Pass criteria – The displayed value matches the selected date exactly, no extra spaces or characters.
- Fail signal – The field shows a different date, the picker does not close, or the format is wrong.
- Example – On a travel‑booking site, selecting
2025‑07‑15results in the field showing07/15/2025when the locale isen‑US; the test expects2025‑07‑15if the format is ISO. - Automation hint – In Playwright:
await page.fill('#date-input', ''); await page.click('#date-input'); await page.click('text=15'); await expect(page.locator('#date-input')).toHaveValue('2025-07-15');
Month Navigation
- What to do – Open the picker, navigate forward and backward through months using the arrow controls, select a date in a non‑current month, and verify the field updates.
- Pass criteria – Each click changes the displayed month header correctly; the selected date appears in the field after closing.
- Fail signal – Month header sticks, jumps incorrectly, or the selected date is not reflected.
- Example – Starting from July 2025, clicking the “next month” button twice should show September 2025; selecting the 22nd yields
2025‑09‑22. - Automation hint – Use a loop that counts clicks and asserts the month header text after each iteration.
Year Selection (Dropdown or Direct Input)
- What to do – If the picker offers a year selector, open it, choose a year far from the current one (e.g., 1900 or 2100), then pick a month and day, and confirm the result.
- Pass criteria – The year dropdown reflects the chosen value, and the final date is correct.
- Fail signal – Year selector does not open, selects the wrong year, or the final date reverts to a default.
- Example – Choosing year 1995, month February, day 29 (a leap year) should be allowed and produce
1995‑02‑29only if the year is actually a leap year; otherwise the picker should disable the 29th. - Automation hint – After selecting the year, re‑open the month view and assert that the 29th is either enabled or disabled according to leap‑year logic.
Inline vs Dialog Presentation
- What to do – Test both modal dialog pop‑ups and inline embedded calendars. Ensure that scrolling behind a modal does not affect the picker state, and that an inline picker updates the field without a separate “confirm” button.
- Pass criteria – Modal dialog traps focus inside the calendar until closed; inline picker updates instantly on date selection.
- Fail signal – Focus escapes a modal, or inline picker requires an extra tap to commit the value.
- Example – On a mobile form, tapping the date field opens a full‑screen dialog; scrolling the page behind it should be blocked, and selecting a date should close the dialog and fill the field.
- Automation hint – Verify that
document.activeElementstays within the picker container while the dialog is open.
Touch and Mouse Interaction
- What to do – Perform the same selection sequence using touch events (on a device or emulator) and mouse clicks (on desktop). Confirm that both produce identical results.
- Pass criteria – No difference in selected date, field value, or UI state between input modalities.
- Fail signal – Touch events are ignored, or mouse clicks produce an offset selection.
- Example – On a tablet, a long‑press on the date field should not trigger the picker; a single tap should.
- Automation hint – Use Appium’s
touchActionfor tap/swipe and Selenium’sclickfor mouse; compare outputs in a data‑driven test.
Keyboard Navigation
- What to do – Focus the date input with
Tab, then use arrow keys,Page Up/Down,Enter, andEscto navigate and select a date. Verify that the field updates correctly and that the picker closes onEnterorEsc. - Pass criteria – All keyboard commands work as described; focus returns to the triggering element after closure.
- Fail signal – Arrow keys do not change focus,
Enterfails to close, or focus is lost. - Example – In a web app, pressing
Alt+Down Arrowopens the picker, thenRight Arrowmoves to the next day,Enterselects it. - Automation hint – Use Playwright’s
page.press('ArrowRight')and assert the value afterpage.press('Enter').
Date Picker Testing Checklist (2026): Error Handling and Validation
Error handling ensures that the component rejects malformed input and communicates the problem clearly to the user. This area often overlaps with accessibility because error messages must be perceivable.
Invalid Format Input
- What to do – Manually type a date that does not match the expected pattern (e.g.,
32/13/9999,abcd, or2025-07). Submit the form or trigger validation. - Pass criteria – The field displays an inline error message, the form is blocked from submission, and the picker does not accept the value.
- Fail signal – The invalid value is accepted, or no error is shown.
- Example – Typing
2025/07/31in a field expectingDD‑MM‑YYYYshould trigger an error like “Please enter a date in DD‑MM‑YYYY format.” - Automation hint – After filling the field, check for the presence of an element with role
alertor a specific error‑message class.
Out‑of‑Range Dates
- What to do – Attempt to select a date earlier than the minimum allowed or later than the maximum allowed (if such limits exist). This can be done by typing or by scrolling the calendar beyond the permitted range.
- Pass criteria – The picker either disables the out‑of‑range cells or shows a tooltip indicating the limit; the field retains the last valid value.
- Fail signal – Out‑of‑range dates remain selectable and are accepted.
- Example – A birth‑date picker with a minimum of
1900‑01‑01should grey out any day in 1899 and prevent selection. - Automation hint – Inspect the CSS class or attribute (
aria-disabled="true") on the disabled cell.
Disabled or Blocked Dates
- What to do – If the application blocks certain weekdays (e.g., Sundays) or specific dates (e.g., holidays), verify that those cells are not interactable and that attempting to select them yields no change.
- Pass criteria – Blocked cells are visually dimmed, not focusable, and do not fire a selection event.
- Fail signal – Blocked cells respond to clicks/taps.
- Example – A hotel booking picker blocks past dates and the day of arrival; trying to click yesterday does nothing.
- Automation hint – Use
page.isEnabled()on the cell element before and after a click attempt.
Conflicting Constraints (Min/Max + Blocked Days)
- What to do – Combine a minimum date, a maximum date, and a set of blocked weekdays. Attempt to select a date that satisfies one constraint but violates another (e.g., a weekday that is allowed by range but blocked by policy).
- Pass criteria – The more restrictive rule wins; the date is unavailable.
- Fail signal – The date is selectable despite violating a rule.
- Example – Min =
2025‑01‑01, Max =2025‑12‑31, blocked = all Fridays. Trying to pick2025‑06‑13(a Friday) should be disallowed even though it lies inside the range. - Automation hint – After setting constraints, iterate through a calendar month and assert that each cell’s enabled state matches the expected rule matrix.
Input Sanitization on Paste
- What to do – Paste a string that contains a valid date plus extra characters (e.g.,
2025-07-15 extra) or a completely different format. Observe whether the picker strips the junk or rejects the entry. - Pass criteria – Either the extra characters are trimmed and the valid date is accepted, or the field shows an error and does not change.
- Fail signal – The invalid pasted string is accepted as‑is.
- Example – Pasting
2025-07-15 00:00into a date‑only field should result in an error about unexpected time component. - Automation hint – Use
page.evaluate(() => navigator.clipboard.writeText(text))thenpage.fill()via paste and inspect the field.
Date Picker Testing Checklist (2026): Edge and Boundary Cases
Edge cases often involve calendar peculiarities, timezone shifts, or extreme values that only appear after long‑term use. Treat them as exploratory tests that you run less frequently but keep in your regression suite.
Leap Year Handling
- What to do – Open the picker in a leap year (e.g., 2024) and verify that February shows 29 days; then switch to a non‑leap year (2025) and confirm the 29th is hidden or disabled.
- Pass criteria – Day‑count matches the Gregorian leap‑year rule; the UI updates instantly when the year changes.
- Fail signal – February always shows 28 days, or the 29th appears in a non‑leap year.
- Example – A scheduler that lets users pick recurring events fails to show Feb 29 2024, causing the event to be skipped.
- Automation hint – After changing the year selector, count the number of
orelements representing days in February.Century and Millennium Boundaries
- What to do – Navigate to dates at the edge of supported ranges (e.g.,
1900‑01‑01or2099‑12‑31if those are limits). Try to go one day beyond. - Pass criteria – The picker either stops at the boundary and disables further navigation, or it shows a clear “out of range” message.
- Fail signal – The calendar wraps incorrectly or allows selection beyond the supported range.
- Example – A financial instrument’s maturity date picker should not let users pick a date after 2099‑12‑31.
- Automation hint – Attempt to click the “next month” arrow when displaying the final month; assert that the arrow is disabled or that the month header does not change.
Timezone Shifts and DST Transitions
- What to do – If the picker stores an underlying timestamp, select a date just before a DST change (e.g., March 9 2025 in the US) and another just after (March 10 2025). Verify that the stored UTC offset is correct.
- Pass criteria – The date value, when converted to UTC, reflects the correct offset for the selected locale.
- Fail signal – The stored timestamp is off by an hour, causing shift‑related bugs in downstream processes.
- Example – A calendar app that lets users set reminders shows the reminder at the wrong local time after DST.
- Automation hint – After selecting a date, read the hidden input value (if any) and compare it to an expected UTC string computed via
Intl.DateTimeFormat.
Calendar System Switching (Gregorian, Islamic, etc.)
- What to do – If the application supports alternative calendars, switch the locale or explicit calendar type and verify that the displayed month names, day counts, and year numbering change accordingly.
- Pass criteria – The UI shows the correct calendar system; selecting a date returns the correct ISO‑8601 date after conversion.
- Fail signal – Month names remain Gregorian, or the selected date converts incorrectly.
- Example – Switching to the Islamic Hijri calendar should show month names like Muharram, Safar, … and a year offset of approximately ‑ 581.
- Automation hint – Change the
langattribute on theelement or invoke a locale‑switch API, then assert the month header text.
Long‑Press / Hover Tooltips
- What to do – On mobile, long‑press a date cell to see if a tooltip or extra info appears (e.g., “Today”, “Selected”, “Blocked”). On desktop, hover over a cell.
- Pass criteria – The tooltip appears after the appropriate delay, contains relevant info, and disappears when the gesture ends.
- Fail signal – No tooltip, or it stays on screen indefinitely.
- Example – Long‑pressing a weekend day shows “Weekend – higher rates”.
- Automation hint – Use Appium’s
longPressaction and then check for the presence of an element with roletooltip.
Rapid Repeated Interaction (Stress)
- What to do – Tap or click the date field open/close rapidly (e.g., 10 times in 2 seconds) or spam the month‑nav arrows. Observe whether the UI stays responsive and state remains consistent.
- Pass criteria – The picker opens and closes without lag, no duplicate pop‑ups, and the selected date does not flicker.
- Fail signal – The UI becomes unresponsive, shows multiple overlay instances, or the date value flickers.
- Example – A user with a tremor accidentally taps the field many times; the app should not crash.
- Automation hint – Execute a loop of
page.click('#date-input')followed bypage.waitForTimeout(50)and assert that the overlay count never exceeds 1.
Screen Orientation Change
- What to do – Open the picker in portrait mode, then rotate the device to landscape (or resize the browser window) while the picker is open. Verify that the calendar re‑layouts correctly and remains usable.
- Pass criteria – The picker resizes, all dates remain tappable/clickable, and no clipping occurs.
- Fail signal – Parts of the calendar are cut off, or the picker closes unexpectedly.
- Example – On a tablet, rotating while the date picker is open should not hide the “Cancel” button.
- Automation hint – In Appium, use
driver.rotate(); in Playwright, usepage.setViewportSize({ width: 800, height: 600 })and then assert the overlay’s bounding box.
Date Picker Testing Checklist (2026): Accessibility and WCAG Compliance
Accessibility is not an optional add‑on; it is a legal requirement in many jurisdictions and improves usability for everyone. Test each WCAG success criterion that applies to interactive controls.
Keyboard Operability (2.1.1)
- What to do – Ensure every action achievable with a mouse or touch can also be performed via keyboard alone.
- Pass criteria –
Tabmoves focus into the picker, arrow keys navigate days,Page Up/Downchange months,Enterselects,Esccancels. - Fail signal – Any action requires a mouse or touch.
- Example – A user relying on switch control can still pick a date using only two switches mapped to
TabandEnter. - Automation hint – Use Playwright’s
page.keyboardto send sequences and assert resulting field value.
Focus Visibility (2.4.7)
- What to do – Verify that the currently focused cell has a visible outline that meets contrast requirements (≥ 3:1 against adjacent colors).
- Pass criteria – The focus indicator is present and sufficiently contrasting.
- Fail signal – Focus indicator missing or too faint.
- Example – On a high‑contrast theme, the default blue outline may be invisible; replace with a 2 px solid yellow.
- Automation hint – Compute the contrast ratio of the focus outline color using a tiny JS snippet and assert ≥ 3.
ARIA Labels and Roles (1.3.1, 4.1.2)
- What to do – Inspect the DOM for appropriate
role="grid",role="row",role="gridcell"(orbutton) and ensure each cell has anaria-labelthat conveys the date in a readable format. - Pass criteria – Screen readers announce “Choose date, July 15, 2025, button” when focusing a cell.
- Fail signal – Missing or incorrect labels cause confusing announcements.
- Example – A cell for the 5th should be labeled “5 July 2025” not just “5”.
- Automation hint – Use
page.getAttribute('aria-label')on a sample cell and compare to expected string.
Contrast of Text and Icons (1.4.3)
- What to do – Measure the contrast ratio between day numbers and the cell background, and between any icons (e.g., “today” highlight) and their background.
- Pass criteria – Minimum 4.5:1 for normal text, 3:1 for large text or icons.
- Fail signal – Low‑contrast day numbers make it hard for low‑vision users.
- Example – Light gray
#CCCCCCon white#FFFFFFfails; change to dark gray#666666. - Automation hint – Use a contrast‑checking library (e.g.,
wcag-contrast) in a test script that reads computed styles.
Touch Target Size (2.5.5)
- What to do – Ensure each interactive cell has a minimum touch target of 48 × 48 dp (or CSS equivalent). Verify with device metrics or browser devtools.
- Pass criteria – All date cells meet the size requirement; no overlapping targets.
- Fail signal – Cells smaller than the threshold cause mis‑taps.
- Example – A densely packed calendar with 32 px cells on a high‑dpi screen violates the guideline.
- Automation hint – In Playwright, use
page.evaluate(() => { const r = el.getBoundingClientRect(); return {width: r.width, height: r.height}; })and assert ≥ 48.
Error Identification (3.3.1)
- What to do – When an invalid date is entered or an out‑of‑range date is attempted, confirm that an error message is programmatically associated with the field (
aria-describedbyoraria-invalid="true"). - Pass criteria – Screen readers announce the error message when the field receives focus.
- Fail signal – Error is only visual, not conveyed to assistive tech.
- Example – Adding
aria-invalid="true"and pointingaria-describedbyto afulfills the rule.- Automation hint – Check that the input element has
aria-invalid="true"and that the referenced element contains text.Resizable Text (1.4.4)
- What to do – Zoom the page to 200 % (or adjust system font size) and verify that the date picker remains usable, with no loss of content or functionality.
- Pass criteria – All dates remain readable and selectable; the picker does not overflow its container.
- Fail signal – Text gets clipped, or the layout breaks.
- Example – A fixed‑width calendar of 250 px may cause horizontal scroll at 200 % zoom; switch to a fluid width.
- Automation hint – Set
page.setViewportSize({ width: 1200, height: 800 })and thenpage.evaluate(() => document.body.style.zoom = '2'); assert no overflow.
Date Picker Testing Checklist (2026): Security and Privacy Considerations
While a date picker seems innocuous, improper handling of user‑supplied dates can lead to injection, manipulation, or unintended data exposure.
Input Injection Protection
- What to do – Attempt to inject script or HTML via the date field (e.g.,
,'; alert('xss');). Observe whether the value is escaped before being rendered elsewhere. - Pass criteria – The injected string is treated as plain text; no script executes.
- Fail signal – Script runs or HTML appears in the DOM.
- Example – A poorly sanitized date value inserted into a server‑side rendered table leads to stored XSS.
- Automation hint – After submitting the form, retrieve the rendered HTML and assert that the injected string does not contain
<or>characters.
Date Manipulation for Privilege Escalation
- What to do – If the application uses the selected date to make access‑control decisions (e.g., “users over 18 can view”), try to submit a date that falsifies age.
- Pass criteria – The backend validates the date against a trusted source (e.g., server clock) and rejects impossible values.
- Fail signal – The client‑side date is trusted without re‑validation, allowing under‑age access.
- Example – A birth‑date picker that lets a 16‑year‑old enter
2000‑01‑01to appear over 18. - Automation hint – Send the selected date via API and check the response status code for a validation error.
Data Leakage via URL or Logs
- What to do – Examine whether the selected date is appended to URLs, stored in logs, or included in error messages in plain text.
- Pass criteria – Sensitive date information (e.g., birth date) is not exposed in URLs or logs unless explicitly required and secured.
- Fail signal – The date appears in query strings or server logs in clear form.
- Example – A GET request to
/search?date=2025-07-15logs the full URL, potentially leaking the date to third‑party analytics. - Automation hint – Capture network requests and assert that query parameters do not contain PII unless hashed or encrypted.
Cache Poisoning
- What to do – If the picker relies on a cached calendar view (e.g., pre‑generated month HTML), try to poison the cache with an unexpected locale or year value.
- Pass criteria – Cache keys include all relevant inputs (locale, timezone, min/max, blocked dates) so that a poisoned entry cannot be served to another user.
- Fail signal – A malicious user’s request causes another user to see incorrect month names or disabled dates.
- Example – Sharing a cached month view for
en‑USinadvertently serves it to afr‑FRuser, showing wrong month names. - Automation hint – Make two requests with different locales and compare the returned HTML; assert they differ as expected.
Secure Randomness for Placeholder Values
- What to do – If the picker shows a random “suggested date” (e.g., for a demo), verify that the value is not predictable or derived from user‑specific data.
- Pass criteria – Suggestion is generated using a cryptographically secure RNG or is static and non‑identifying.
- Fail signal – Suggestion reveals incremental patterns that could be guessed.
- Example – A suggestion that always equals the current date minus 7 days could be used to infer a user’s behavior.
- Automation hint – Call the suggestion endpoint multiple times and verify the distribution has sufficient entropy (e.g., chi‑square test).
Date Picker Testing Checklist (2026): Performance and Responsiveness
Performance defects are especially noticeable on low‑end devices or when the picker is rendered many times (e.g., in a large form). Test both runtime efficiency and fluidity of animations.
Initial Render Time
- What to do – Measure the time from triggering the picker opening (click or focus) to the moment the calendar is fully painted and interactive.
- Pass criteria – Render time < 150 ms on a mid‑tier device (e.g., Snapdragon 7 Gen 2) and < 80 ms on a desktop Chrome.
- Fail signal – Noticeable lag (> 300 ms) leads to perceived unresponsiveness.
- Example – A picker that loads month data via a slow API adds 400 ms delay.
- Automation hint – Use
performance.mark('picker-open')before the interaction andperformance.mark('picker-shown')after the overlay appears; compute the difference.
Animation Smoothness
- What to do – If the picker uses animated transitions (fade, slide, scale), verify that the animation maintains 60 fps (or the device’s refresh rate) without dropped frames.
- Pass criteria – Frame timing stays within 16.6 ms per frame; no jank visible.
- Fail signal – Visible stutter or dropped frames.
- Example – A slide‑down animation that uses
setTimeoutinstead ofrequestAnimationFramecauses judder. - Automation hint – In Playwright, enable the
chrome://tracingor use thePage.evaluateto readperformance.getEntriesByType('frame').
Memory Usage
- What to do – Open and close the picker repeatedly (e.g., 50 times) and observe whether memory grows steadily.
- Pass criteria – Memory increase stays within a small bounded range (< 5 MB) after many cycles.
- Fail signal – Continuous upward trend indicating a leak (e.g., retained event listeners).
- Example – Each opening attaches a new resize listener that is never removed.
- Automation hint – In Chrome DevTools, record a heap snapshot before and after the loop; compare retained sizes.
Lazy Loading of Month Views
- What to do – If the picker fetches month data on demand (e.g., from a server for infinite scrolling), verify that only the requested month is fetched and that rapid scrolling does not trigger excessive requests.
- Pass criteria – Network tab shows a single request per newly visible month; no duplicate requests for the same month.
- Fail signal – Multiple requests for the same month or requests or adjacent month, causing wasted bandwidth.
- Example – Scrolling quickly from January to December triggers requests for every intermediate month even though the user never paused.
- Automation hint – Spy on
fetchorXMLHttpRequestand assert that the call count matches the number of unique month values visited.
Interaction Delay (Input Lag)
- What to do – Measure the delay between a tap/click on a day cell and the visual update (highlight) or the field value change.
- Pass criteria – Input lag < 50 ms.
- Fail signal – Lag > 100 ms makes the UI feel sluggish.
- Example – Using a heavyweight framework that re
Test Your App Autonomously
Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.
Try SUSA Free - Automation hint – Check that the input element has
- What to do – Navigate to dates at the edge of supported ranges (e.g.,