Offline Mode
// Definition
How an app behaves with no or intermittent network — queuing actions, serving cached data, and syncing when connectivity returns. Mobile networks drop constantly (tunnels, lifts, flaky wifi), so "works offline" isn't a feature so much as a requirement. The hard part QA targets is the transition: what happens to in-flight actions when the connection drops and returns.
// Why it matters
Offline bugs are data-loss bugs — an action that silently fails on a dropped connection, or a sync that overwrites newer data on reconnect, destroys user trust. QA matters because these only surface in the transition (online→offline→online), which is exactly the state manual testing on stable office wifi never hits.
// How to test
// Toggle connectivity mid-flow and assert queue + sync behaviour
await driver.$('~add-note').click()
await driver.$('~note-body').setValue('written offline')
await driver.setNetworkConnection(0) // airplane mode ON
await driver.$('~save').click()
expect(await driver.$('~pending-sync-badge').isDisplayed()).to.be.true // queued, not lost
await driver.setNetworkConnection(6) // wifi + data back
await driver.$('~pending-sync-badge').waitForExist({ reverse: true }) // synced
// assert no data loss and no duplicate on the server// Common mistakes
- Testing fully-offline but never the online→offline→online transition (where bugs live)
- Losing queued actions silently instead of persisting them
- Sync conflicts that overwrite newer data (last-write-wins data loss)
// Related terms
Caching
Storing the result of an expensive operation (a database query, an API call, a rendered page) so subsequent requests can be served faster without repeating the work. Caching introduces a class of test-specific bugs: stale data shown after an update, cache invalidation failures (old data persists after it should have been evicted), and CDN edge-cache inconsistencies where different users see different versions. Test strategy: verify freshness after writes, verify cache is bypassed when it should be (e.g. authenticated vs. public), and test behaviour when the cache layer is cold or unavailable.
Retry Logic
Re-running a failing test or step automatically. Useful for taming flake from infrastructure issues — but can mask real bugs if used as a band-aid for genuinely flaky tests.
Native App
A mobile application built with platform-specific languages and SDKs — Swift or Objective-C for iOS, Kotlin or Java for Android. Native apps have full access to device hardware (camera, NFC, biometrics, GPS), run with the best performance characteristics, and follow each platform's UI conventions. For testers, native apps require platform-specific automation frameworks: XCUITest for iOS or Espresso for Android at the unit/integration layer, and Appium's UIAutomator2/XCUITest drivers at the end-to-end layer. Native apps are the gold standard for user experience but the most expensive to build and test across both platforms.