Add a second evidence track
Performance and accessibility answer different questions. A grid can render quickly while preventing a keyboard user from completing an edit. It can also expose useful semantics while becoming unusably slow during navigation. Evaluate both tracks against the same representative workflows, but keep their findings separate. A fast timing must not compensate numerically for a task that some users cannot complete.
This is a proposed testing protocol. The supplied CompareGrids snapshot does not establish an accessibility ranking, and this article does not certify any listed product. The next useful step would be to publish reproducible task results for specific versions, configurations and assistive-technology combinations. The protocol below describes how to make those results meaningful.
Begin with the interaction model
Decide whether the surface is a static table, an interactive grid or a hierarchical treegrid. These patterns carry different expectations. Adding a grid role to a table does not implement keyboard behavior. The W3C Authoring Practices grid pattern describes a composite interface in which authors manage movement and focus. [1] Use the relevant pattern to define expectations before writing assertions.
Describe the required tasks in ordinary language: find a record, identify its column, edit a value, understand an error and return to the surrounding page. Include the most important secondary task, such as filtering or exporting. A catalogue of attributes is less useful than evidence that people can complete the work reliably.
Identify custom content within cells. Buttons, links, checkboxes and editors introduce interaction boundaries inside the larger grid. Specify how users enter those controls and return to cell navigation. Conflicting key handling can make a component appear functional in one mode while trapping users in another.
Build a representative test matrix
Record the operating system, browser, assistive technology and versions for every manual session. Choose combinations that reflect the product's supported environment and audience. Do not describe one successful combination as universal support. Keep the matrix small enough to execute consistently, then expand it when a requirement or observed issue justifies the additional work.
Use a deterministic dataset containing long headers, repeated values, empty cells, validation errors and grouped records where applicable. Include enough rows to activate virtualization. A ten-row example can miss focus and announcement problems that appear only when elements are recycled. Keep expected record identities and values available to the reviewer.
Run the same tasks on the default component and on the application's customized configuration when useful. This helps identify whether a problem originates in the integration or the underlying behavior. Report the configuration actually intended for production as the primary result. A default demo cannot certify a custom renderer that changes semantics or focus.
Test entry, movement and exit
Start before the grid in the page's normal focus order. Enter it using the keyboard and confirm that the focused location is visible and understandable. Move across columns and rows, including boundaries. Verify the expected behavior of Home, End and page movement where those keys are part of the documented interaction model.
Leave the grid in both forward and backward directions. Open a menu, dismiss it and check where focus returns. Repeat with an editor and a dialog. A user must not need a pointer to escape a temporary state. Record unexpected focus loss as a functional failure, even if the visual highlight appears in approximately the right place.
Test movement after sorting, filtering and row removal. The focused record may move or cease to exist, so the application needs a deliberate fallback. The screen should not suggest that focus remains on one record while keyboard actions affect another. Stable identity is as important to accessibility as it is to data correctness.
Inspect meaning, not just markup
Use a screen reader to determine whether users can identify the current row, column and value. Inspect header associations and the presentation of sorting or selection state. Avoid assuming that the presence of an attribute guarantees a useful announcement. The combination of browser, assistive technology and application behavior determines what the user experiences.
Check loading and error states. A remote filter may take time, and an empty result must be distinguishable from a failed request. Announcements should provide useful changes without flooding the user during rapid movement. Excessive repeated messages can make a technically exposed interface difficult to use.
Validate editing feedback. An error should identify the affected field and explain the problem while preserving a path to correction. Test both local validation and a rejected server save. Confirm that the user can discover the unsaved state after moving elsewhere and returning. A color change alone is insufficient evidence of understandable feedback.
Exercise virtualization explicitly
Move focus toward the edge of the rendered range and continue into newly created rows. Scroll away from a focused or selected record and return. Verify that recycled elements expose the new content and identity rather than stale labels. Repeat after changing column widths or row heights, because layout changes can alter the rendered window.
Inspect reported positions and totals where the component exposes them. They should describe the logical dataset accurately, including partial loading where relevant. An unloaded result set creates different constraints from a fully local dataset. Document how the interface communicates unknown totals rather than inventing a precise count.
Test findability as a workflow. Browser find may not locate content absent from the DOM, so an application search may be necessary for the intended task. The search must have a clear scope and a usable path to the matching record. Do not assume that virtualized content is discoverable simply because it exists in a JavaScript array.
Combine visual and motor checks
Review focus visibility, zoom, text resizing and high-contrast or forced-color behavior in the supported environment. Check pinned regions, overlays and menus for clipped content. A focus ring can exist but be hidden beneath a sticky element. Inspect the active state at the viewport edges and after horizontal scrolling.
Try the interface with keyboard-only input and without relying on precise pointer movement. Resizing and reordering may need alternatives when those operations are required. Determine whether the product genuinely requires a dense grid on a small screen or should provide a different view. Responsiveness is a task-design question as well as a CSS question.
Keep automated checks as one source of evidence. They can identify some markup and contrast issues, but they cannot establish that the complete editing or navigation workflow is understandable. Pair them with manual task results and, where feasible, review by people who use assistive technology regularly.
Publish findings that can be reproduced
For each task, report pass, partial completion, failure or not tested, with a short explanation and reproduction steps. Separate blockers from minor friction. Include the exact configuration and any workaround required. Avoid compressing everything into an unexplained accessibility score that hides which essential task failed.
Publish performance observations for the same accessible configuration. If an optimization removes useful semantics or changes keyboard behavior, it is a different product configuration and needs separate evaluation. Retest the critical tasks after fixes, retaining enough history to show what changed.
A credible accessibility extension to the benchmark would therefore be a collection of bounded, reviewable results. It would help teams ask informed questions and reproduce important scenarios. It would not turn one automated scan or a vendor claim into a universal guarantee about every application built with that grid.