Bot Arena
Selector resistance · Level 8 View on report ↗

Virtual scrolling

1,000 accounts, only a window's worth in the DOM. Standard selectors find nothing off-screen.

What's measured on this page
- Instead of a free-text email field, the page asks you to select your account from a list of 1,000 users. - The list uses virtual scrolling: only the rows currently inside the visible viewport are mounted in the DOM. Scroll up or down and the off-screen rows are recycled. - page.getByText('user-373@example.com') returns empty for rows that are not currently mounted. A test cannot find what is not in the DOM. - Selecting an account then unlocks the password field and Sign-in button. The standard getByLabel('Email') never finds anything — there is no Email field at all on this page. - A vision-based automation tool scrolls the list, recognises the target row when it scrolls into view, and clicks. The scroll-and-recognise loop is a primitive every visual automation pipeline already has.

Select your account

1,000 accounts. Only the visible window exists in the DOM at any moment.

Scroll the list to find user-371@example.com. Playwright's getByText can't see rows that aren't currently mounted.

Production apps using this technique

  • TanStack Virtual / react-window / react-virtual The default tool for performant lists in React. Used inside Linear, Plaid, Vercel dashboards, Coinbase, and hundreds of other production SaaS apps.
    Market Default React virtualisation choice (~80% of new projects) Users react-window ~1M weekly npm downloads; TanStack Virtual ~500K weekly
  • AG Grid, MUI X DataGrid, ReactTable Enterprise data-grid libraries virtualise both rows and columns. Selectors for off-screen cells return nothing until the grid is scrolled.
    Market AG Grid claims used by all top-30 banks and ~90% of Fortune 500 Users AG Grid ~300K+ developers; MUI X 50K+ paying customers; ReactTable ~1.5M weekly npm downloads
  • Slack message list, Discord channel scrollback Long chat histories are virtualised. Tests that try to find a message from yesterday must scroll until it materialises.
    Market Slack ~35% of team-chat market; Discord dominates gaming/community chat Users Slack ~35M+ daily; Discord ~200M+ monthly active
  • Notion databases, Coda tables, Airtable grids Database views virtualise rows. Hidden rows are not in the DOM; they are not in the accessibility tree either.
    Market Airtable leads no-code databases; Notion leads workspace docs Users Notion 100M+ users; Airtable 450K+ orgs; Coda ~100K orgs
  • Gmail's thread list, Outlook Web message pane Email clients virtualise the inbox view at scale. Selecting a specific thread by selector is the canonical Playwright pain point in Gmail-clone tests.
    Market Gmail ~30% of consumer email; Outlook ~17% (still leads in enterprise) Users Gmail 1.8B+ users; Outlook ~400M users

Figures are approximate / company-disclosed (~2024–2025). Sources: company filings, industry reports (Gartner, IDC, BuiltWith, npm stats), and public DAU disclosures.