Mobile & Web Client Testing
Mobile and browser-client testing — app types, devices vs emulators, interruption and locale testing, traffic inspection, and the browser DOM.
19 questions
JuniorTheoryVery commonWhat do WCAG, axe, and Lighthouse each contribute to accessibility testing?
What do WCAG, axe, and Lighthouse each contribute to accessibility testing?
WCAG is the standard — success criteria under four principles at levels A/AA/AAA. axe is an automated engine scanning the rendered DOM for violations like missing labels or low contrast. Lighthouse audits a page and scores accessibility. Automated tools catch only part; contrast, labels, and structure still need manual and assistive-tech checks.
Common mistakes
- ✗Thinking an automated pass means full accessibility
- ✗Confusing WCAG (the standard) with axe and Lighthouse (the tools)
- ✗Skipping manual and screen-reader checks after automated scans
Follow-up questions
- →Which accessibility issues can an automated scan not reliably catch?
- →What do the WCAG conformance levels A, AA, and AAA represent?
JuniorTheoryVery commonHow do real devices, emulators, and simulators differ — and which to prefer?
How do real devices, emulators, and simulators differ — and which to prefer?
A real device gives the most accurate results — true sensors, performance, and network — but is costly. An emulator (Android) models the hardware and OS; a simulator (iOS) only imitates the environment without true hardware emulation. Prefer emulators/simulators for early, cheap, wide coverage and real devices for final and regression passes.
Common mistakes
- ✗Swapping the definitions of emulator and simulator
- ✗Thinking an emulator can replace a real device for final checks
- ✗Believing simulators reproduce real performance accurately
Follow-up questions
- →Which defects can only be reproduced on a real device?
- →Why is an iOS simulator not a true hardware emulator?
JuniorTheoryCommonWhat types of mobile apps exist — native, web, and hybrid?
What types of mobile apps exist — native, web, and hybrid?
A native app is built per platform with the platform SDK, has full device access, and the best performance. A web app runs in the browser and is platform-independent but limited in device access. A hybrid app is web code wrapped in a native shell (a WebView), trading some performance for one shared codebase.
Common mistakes
- ✗Confusing a hybrid app with a pure web app
- ✗Thinking a native app can run on both platforms from one binary
- ✗Believing a web app has full device hardware access
Follow-up questions
- →What testing differences arise between a native and a hybrid app?
- →Why might a team choose hybrid over native despite the performance cost?
JuniorTheoryCommonWhat can browser DevTools do for testing, and how do sniffers differ?
What can browser DevTools do for testing, and how do sniffers differ?
DevTools (Network, Console, Elements, Application tabs) inspect the page the browser rendered and the browser's own requests and responses. A traffic-inspection proxy (a sniffer like Charles or Fiddler) sits between client and server and can intercept and modify any app's traffic — not just the browser's — with map local/remote, breakpoints, and throttling.
Common mistakes
- ✗Thinking DevTools can intercept other apps' traffic
- ✗Believing a sniffer is limited to the browser
- ✗Confusing the Network tab with a full proxy's capabilities
Follow-up questions
- →How would you use a proxy to force a 500 error on one request?
- →Which DevTools tab shows the request and response headers?
MiddleTheoryCommonWhat is interruption testing on mobile, and what scenarios does it cover?
What is interruption testing on mobile, and what scenarios does it cover?
Interruption testing verifies an app behaves correctly when something interrupts it mid-use and then resumes. Scenarios: an incoming call or SMS, a push notification, an alarm, low battery, the app being backgrounded then reopened, network loss, and the screen locking. The app must preserve state and recover gracefully after each interruption.
Common mistakes
- ✗Limiting it to incoming calls only
- ✗Forgetting the app must preserve and restore state
- ✗Confusing it with load or stress testing
Follow-up questions
- →How would you verify state is preserved after a backgrounding interruption?
- →Which interruptions are hardest to reproduce on an emulator?
MiddleTheoryCommonWhat are the key iOS vs Android differences a tester must account for?
What are the key iOS vs Android differences a tester must account for?
iOS is a closed, uniform ecosystem with few device models and strict App Store guidelines. Android is open-source with huge fragmentation — many vendors, custom skins, OS versions, and form factors. A key trap: Huawei devices lack Google services, so push via FCM and Google sign-in fail there. Each platform also has its own languages, stores, and review rules.
Common mistakes
- ✗Reversing which platform is open vs closed
- ✗Forgetting Huawei lacks Google services (FCM push fails)
- ✗Underestimating Android device and OS fragmentation
Follow-up questions
- →Why might push notifications fail on a Huawei device specifically?
- →How does Android fragmentation widen your device test matrix?
MiddleTheoryCommonHow do you read iOS, Android, and backend logs when investigating a defect?
How do you read iOS, Android, and backend logs when investigating a defect?
Android: logcat (via adb logcat or Android Studio). iOS: the Xcode console or the macOS Console app. Backend: a centralized log system like Kibana/ELK or Grafana. Crashes go to Crashlytics or Firebase. Logs let a tester see the actual error, stack trace, and request flow behind a symptom, turning a vague "it failed" into a precise, reportable cause.
Common mistakes
- ✗Swapping the Android and iOS log tools
- ✗Thinking the on-screen message is the full cause
- ✗Forgetting backend logs and crash reporters
Follow-up questions
- →Where would you look for a native crash on Android versus iOS?
- →How does a backend log help confirm whether the client or server failed?
MiddleTheoryCommonHow does testing a responsive web app differ from testing a native mobile app?
How does testing a responsive web app differ from testing a native mobile app?
A responsive web app varies along the viewport: breakpoints, widths, orientation, browser zoom, and text scaling, via DevTools device emulation. A native app varies along the device: OS versions, densities, vendors, platform UI conventions, gestures, hardware, permissions, and store review. Responsive testing chases layout reflow in a browser; native chases device and OS fragmentation.
Common mistakes
- ✗Treating web and native testing as the same effort
- ✗Swapping the viewport axis (web) with the device axis (native)
- ✗Forgetting store review, gestures, and permissions are native-only
Follow-up questions
- →Which DevTools feature helps verify responsive breakpoints quickly?
- →Why does a native app need a wider device matrix than a web app?
MiddleTheoryOccasionalWhat is a browser engine, and what are the main ones?
What is a browser engine, and what are the main ones?
A browser engine is the component that parses HTML/CSS and renders the page. The three main ones are Blink (Chromium → Chrome, Edge, Opera), WebKit (Safari), and Gecko (Firefox). The key tester insight: Chrome and Edge share an engine, but Safari and Firefox do not, so cross-browser bugs cluster on the non-Blink engines.
Common mistakes
- ✗Naming browsers (Chrome) instead of engines (Blink)
- ✗Assuming Safari or Firefox run on Chromium/Blink
- ✗Thinking testing one browser covers all engines
Follow-up questions
- →Why does Safari often surface bugs Chrome does not?
- →How do you scope a cross-browser test matrix by engine?
MiddleTheoryOccasionalWhat is the DOM, and how do testers use it?
What is the DOM, and how do testers use it?
The DOM (Document Object Model) is the tree of objects the browser builds from the page's HTML, representing every element and its state. Testers use it to locate elements with selectors (CSS/XPath) for manual checks and automation, to inspect or modify an element's current state, and to verify that the rendered structure matches what is expected.
Common mistakes
- ✗Confusing the DOM with the static HTML source
- ✗Thinking the DOM cannot change after load
- ✗Believing selectors do not operate on the DOM
Follow-up questions
- →How does a dynamic DOM change make a locator flaky?
- →Which selector would you choose for a stable element reference?
MiddleTheoryOccasionalHow do you inspect and modify network requests from a mobile device?
How do you inspect and modify network requests from a mobile device?
Route the device through a proxy tool — Charles, Fiddler, Proxyman, or mitmproxy — and install its trusted root certificate so it can read HTTPS. Then you can inspect requests and responses, modify them, map local/remote, rewrite values, throttle the network, and fault-inject (for example force a 500 on one endpoint) to test how the app handles errors.
Common mistakes
- ✗Forgetting the trusted root certificate needed for HTTPS
- ✗Thinking a proxy cannot modify, only observe
- ✗Believing browser DevTools can capture a native app's traffic
Follow-up questions
- →Why is a trusted root certificate required to read HTTPS traffic?
- →How would you simulate a slow network to one endpoint only?
MiddleDebuggingOccasionalOne of two identical devices gets no push — diagnose why
One of two identical devices gets no push — diagnose why
With the backend and network ruled out, the cause is device- or account-side. Check: notification permission disabled, system or app-level notifications off, battery saver / Doze killing the background process, a stale or missing push token, no Google services (Huawei → FCM token never issued), a different logged-in account, Do-Not-Disturb mode, or an OS-version push difference.
Open full question →Common mistakes
- ✗Blaming the shared app code when the difference is device-side
- ✗Forgetting permissions, battery saver, and Doze can block push
- ✗Overlooking the missing-Google-services (Huawei/FCM) cause
Follow-up questions
- →How would you confirm whether Device B has a valid push token?
- →Why would a Huawei device never receive an FCM push?
MiddleTheoryOccasionalWhat is specific to mobile testing, and what defects appear only there?
What is specific to mobile testing, and what defects appear only there?
Mobile adds concerns absent on desktop: network transitions (Wi-Fi↔mobile, loss), interruptions (calls, SMS, push), huge device and screen fragmentation, app lifecycle (background/foreground, being killed), permissions, and battery. Mobile-only defects cluster around these — state lost on backgrounding, broken behavior on a flaky connection, or layout breaking on an unusual screen.
Common mistakes
- ✗Assuming the desktop suite fully covers mobile
- ✗Forgetting the app lifecycle (background/foreground/killed)
- ✗Ignoring network transitions and device fragmentation
Follow-up questions
- →What is interruption testing and give two examples?
- →How do you prioritize a mobile-only defect against a functional one?
SeniorDesignOccasionalYour mobile app ships in 14 countries. Design a testing and regression strategy: what to verify across locales (translations, RTL, date/number/currency formats, the device locale versus the in-app locale), how to handle per-region payment acquirers and any legal or regulatory differences, how to scope the device matrix per market, and how you would risk-prioritize and time-box a full regression so it stays feasible. Explain how you decide what must be retested everywhere versus only in affected regions.
Your mobile app ships in 14 countries. Design a testing and regression strategy: what to verify across locales (translations, RTL, date/number/currency formats, the device locale versus the in-app locale), how to handle per-region payment acquirers and any legal or regulatory differences, how to scope the device matrix per market, and how you would risk-prioritize and time-box a full regression so it stays feasible. Explain how you decide what must be retested everywhere versus only in affected regions.
Cover localization end to end: translations and truncation, RTL layouts, locale-specific date/number/currency formats, and the device-locale vs in-app-locale split. Verify each region's payment acquirer and legal/regulatory rules, and build a device matrix weighted by market share. Scope regression by risk: retest shared core everywhere, but locale- and payment-specific flows only in affected regions, with a time-box plus a risk buffer.
Common mistakes
- ✗Treating localization as just text translation
- ✗Ignoring device-locale vs in-app-locale mismatches
- ✗Running full regression everywhere instead of risk-scoping by region
Follow-up questions
- →How would you test an RTL layout without reading the language?
- →How do per-region payment acquirers change your test data setup?
SeniorDesignOccasionalA mobile app feels laggy on some devices. Design how you would verify smoothness and pin down the cause: what frame-rate target and per-frame time budget you aim for, how you would reproduce and measure jank (on which devices, with which tools), which metrics you would watch beyond frame rate, and how you would report a performance defect so a developer can act on it. Explain why testing only on a flagship device is misleading.
A mobile app feels laggy on some devices. Design how you would verify smoothness and pin down the cause: what frame-rate target and per-frame time budget you aim for, how you would reproduce and measure jank (on which devices, with which tools), which metrics you would watch beyond frame rate, and how you would report a performance defect so a developer can act on it. Explain why testing only on a flagship device is misleading.
Target 60 fps, a ~16.6 ms per-frame budget; frames over that are dropped and read as jank. Reproduce on low-end and older devices, not just a flagship, and measure with a profiler — dropped frames, CPU/GPU load, memory, and startup time. Report with device, OS, repro steps, the metric trace, and a video, so a developer can act on a concrete, measured regression rather than a vague feel.
Common mistakes
- ✗Testing only on a flagship device
- ✗Reporting lag by feel without metrics or a trace
- ✗Ignoring CPU/GPU, memory, and startup beyond frame rate
Follow-up questions
- →Why is the per-frame budget about 16.6 ms for 60 fps?
- →What would you capture so a developer can reproduce the jank?
SeniorDesignOccasionalYou must test screen-reader accessibility on a single-page app where navigation changes the view by rewriting the DOM client-side, without a full page reload. Sighted testing passes, but blind users report that after tapping a link nothing is announced, focus stays on the old element, and dynamically loaded content is silent. Design your screen-reader test approach: which assistive technologies and platforms you would cover (VoiceOver, TalkBack, NVDA), how you would verify route changes are announced and focus is moved correctly, how ARIA live regions and roles should behave for dynamic content, and why automated accessibility scans alone would not catch these SPA-specific issues.
You must test screen-reader accessibility on a single-page app where navigation changes the view by rewriting the DOM client-side, without a full page reload. Sighted testing passes, but blind users report that after tapping a link nothing is announced, focus stays on the old element, and dynamically loaded content is silent. Design your screen-reader test approach: which assistive technologies and platforms you would cover (VoiceOver, TalkBack, NVDA), how you would verify route changes are announced and focus is moved correctly, how ARIA live regions and roles should behave for dynamic content, and why automated accessibility scans alone would not catch these SPA-specific issues.
Test with real assistive tech on each platform — VoiceOver on iOS, TalkBack on Android, NVDA on desktop web — not automated scans alone. Verify each client-side route change is announced and focus moves to the new view, not the stale element. Confirm dynamically loaded content is exposed via ARIA live regions and correct roles so it is read aloud. Automated tools check static markup, so they miss these dynamic-update and focus failures.
Common mistakes
- ✗Trusting automated scans to cover screen-reader behavior on an SPA
- ✗Not announcing client-side route changes or moving focus
- ✗Leaving dynamic content out of ARIA live regions so it stays silent
Follow-up questions
- →How do you move screen-reader focus after a client-side route change?
- →Which SPA failures does an automated accessibility scan miss?
JuniorTheoryRareWhat do the numbers in an app version like 4.21.3 mean?
What do the numbers in an app version like 4.21.3 mean?
It is semantic versioning, MAJOR.MINOR.PATCH. MAJOR (4) bumps on breaking, incompatible changes; MINOR (21) on new backward-compatible features; PATCH (3) on backward-compatible bug fixes. The scheme lets a tester or user infer the risk of an upgrade from the numbers alone.
Common mistakes
- ✗Reversing the order of major, minor, and patch
- ✗Thinking a patch release can introduce breaking changes
- ✗Believing the numbers carry no compatibility meaning
Follow-up questions
- →Which segment should change for a backward-compatible new feature?
- →How does the version number guide your regression scope?
SeniorDesignRareYour mobile app has users across hundreds of Android and iOS device models, OS versions, screen sizes, and densities, and you cannot test them all. Design how you would build and maintain a device test matrix under this fragmentation: which data you would use to choose the devices that matter (market share, your own analytics, crash reports, business-critical segments), how you would balance real devices against emulators and a cloud device farm, how you would tier the matrix so a smoke set runs per build and a wider set runs before release, and how you would keep the matrix current as new devices, OS versions, and vendor quirks (such as Huawei lacking Google services) appear. Explain how you justify what you deliberately leave uncovered.
Your mobile app has users across hundreds of Android and iOS device models, OS versions, screen sizes, and densities, and you cannot test them all. Design how you would build and maintain a device test matrix under this fragmentation: which data you would use to choose the devices that matter (market share, your own analytics, crash reports, business-critical segments), how you would balance real devices against emulators and a cloud device farm, how you would tier the matrix so a smoke set runs per build and a wider set runs before release, and how you would keep the matrix current as new devices, OS versions, and vendor quirks (such as Huawei lacking Google services) appear. Explain how you justify what you deliberately leave uncovered.
Choose devices by evidence: market share, your usage analytics, crash-report hotspots, and business-critical segments. Balance real devices for high-value cases against emulators and a cloud farm for breadth. Tier it: a smoke set per build, a wider risk-weighted set before release. Refresh as new models, OS versions, and vendor quirks appear, justifying each uncovered device by low share and risk.
Common mistakes
- ✗Picking devices by gut instead of share, analytics, and crash data
- ✗Testing only a flagship and ignoring low-end fragmentation
- ✗Letting the matrix go stale as new models and OS versions ship
Follow-up questions
- →Which data source best reveals the devices your real users run?
- →How would you decide a device is safe to leave uncovered?
SeniorDesignRareA mobile app is used on trains and inside buildings where the connection is not cleanly on or off but intermittent — high latency, packet loss, requests that time out midway, and constant flapping between Wi-Fi and cellular. Users report duplicated orders after a retry, a spinner that never ends, and edits that silently vanish after they come back online. Design a test approach for this degraded, unstable connectivity: how you would reproduce it deterministically, what behaviors you would verify (offline queueing and sync-on-reconnect, retry with backoff, idempotency of retried writes, conflict resolution, partial-data rendering, timeouts and user feedback), and how this differs from testing a single clean network drop.
A mobile app is used on trains and inside buildings where the connection is not cleanly on or off but intermittent — high latency, packet loss, requests that time out midway, and constant flapping between Wi-Fi and cellular. Users report duplicated orders after a retry, a spinner that never ends, and edits that silently vanish after they come back online. Design a test approach for this degraded, unstable connectivity: how you would reproduce it deterministically, what behaviors you would verify (offline queueing and sync-on-reconnect, retry with backoff, idempotency of retried writes, conflict resolution, partial-data rendering, timeouts and user feedback), and how this differs from testing a single clean network drop.
Reproduce it with a proxy or link conditioner injecting latency, packet loss, and Wi-Fi/cellular flapping — not just airplane mode. Verify offline queueing and sync on reconnect, retry with backoff, and idempotent retried writes so a resent order is not duplicated. Check conflict resolution, partial-data rendering, timeouts, and clear feedback. The focus is data integrity under uncertainty, not a clean drop-and-restore.
Common mistakes
- ✗Testing only a clean on/off drop, never degraded flaky connectivity
- ✗Ignoring idempotency, so a retried write duplicates the action
- ✗Skipping conflict resolution for edits made while offline
Follow-up questions
- →How would you make a retried payment request safely idempotent?
- →Which tool injects latency and packet loss for deterministic repro?