How to Test Search Functionality in Mobile and Web Apps

Search is where users go when they cannot find what they want through navigation. A broken search means a lost conversion or a failed task. Testing it well covers relevance, responsiveness, edge cases

May 29, 2026 · 3 min read · How-To Guides

Search is where users go when they cannot find what they want through navigation. A broken search means a lost conversion or a failed task. Testing it well covers relevance, responsiveness, edge cases, and accessibility. This guide is the checklist.

What to test

Query input

  1. Search-as-you-type with debounce (300-500ms)
  2. Clear button present, functional
  3. Voice input option (if supported)
  4. Paste works
  5. Autocorrect / autocapitalize appropriate for search (usually off)
  6. Submit on enter (keyboard return)
  7. Keyboard dismisses on scroll or tap elsewhere

Results

  1. Relevant results appear within 2 seconds
  2. Result count visible ("42 results" or similar)
  3. Infinite scroll / pagination for long lists
  4. Empty state helpful — suggestions, not a blank screen
  5. "Did you mean" for typos
  6. Exact match ranked above partial matches

Filters and sort

  1. Filter UI visible and functional
  2. Filter state visible in query bar / chips
  3. Filter reset clears all selections
  4. Sort order (relevance, date, popularity) respected

Autocomplete / suggestions

  1. Recent searches suggested on empty input
  2. Suggestions update as user types
  3. Trending / popular suggestions where appropriate
  4. Suggestion tap populates input and executes search
  5. Suggestion keyboard-navigable

Edge cases

  1. Empty query → appropriate default state
  2. Single character → too short message or start suggestions
  3. Very long query (500+ chars) → handled or truncated cleanly
  4. Special characters (!, @, #, emoji, unicode) → either handled or sanitized
  5. SQL injection patterns → sanitized, not executed
  6. Foreign language (RTL, CJK) → correct rendering and search
  7. Rapid query changes → debounce prevents stale results
  8. Results filter by permission (user sees only what they should)

Accessibility

  1. Search input labeled ("Search products")
  2. Result count announced to screen reader
  3. Results keyboard-navigable
  4. Voice search accessible via hands-free
  5. Large touch targets on result rows

Performance

  1. First result within 2 seconds on 4G
  2. No jank during typing
  3. Background search when tab not visible paused
  4. Cache recent queries for offline

Manual testing

Test specific scenarios:

Automated

Unit / integration

Test the search backend with known query → expected ranking.

Assert empty state, correct pagination, filter combinations.

UI (Playwright / Appium)


def test_search(page):
    page.goto("/search")
    page.fill('[data-test="search"]', "phone")
    # Wait for debounced results
    page.wait_for_selector('[data-test="result-row"]')
    assert len(page.query_selector_all('[data-test="result-row"]')) > 0

How SUSA tests search

SUSA's flow detector identifies search screens (SearchView detection, input + results pattern). Exploration drives:

Performance monitor captures result latency. Accessibility check flags missing labels on results.


susatest-agent test myapp.apk --persona curious --steps 100

Common production bugs

  1. Stale results from previous query — debounce not properly canceling old requests
  2. Empty state is a blank page — users confused, leave
  3. Results not ranked by relevance — alphabetical or date-based where relevance expected
  4. Voice input types but does not submit — UX dead-end
  5. Suggestions include deleted / unavailable items — outdated index

Search is a silent conversion killer. Automate the relevance tests, manual-check the UX, run SUSA on every release to catch the weird ones.

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