Offline Mode Testing Checklist (2026)

Offline Mode Testing Checklist (2026)

January 15, 2026 · 14 min read · Testing Checklists

Offline Mode Testing Checklist (2026)

A practical, item‑by‑item guide you can apply today to verify that your mobile or web app behaves correctly when the network disappears, stays spotty, or comes back after a long pause. The list below groups 30+ concrete checks into logical areas, supplies pass/fail criteria, shows real‑world examples, and points out where manual effort shines and where autonomous exploration can sweep the majority of items in a single run.

---

Understanding Offline Mode Requirements

Defining offline scenarios

Offline mode is not a single state; it is a spectrum that includes:

ScenarioDescriptionTypical trigger
Never‑connectedDevice starts with radios off (airplane mode) or no SIM/Wi‑Fi available.User enables airplane mode before launch.
Sudden lossNetwork drops while a flow is in progress.Walking out of Wi‑Fi range, tunnel, elevator.
Intermittent flappingConnectivity toggles every few seconds.Poor cellular reception, moving vehicle.
Delayed reconnectionNetwork returns after a noticeable gap (seconds to minutes).Switching from cellular to Wi‑Fi, VPN reconnect.
Metered/cost‑sensitiveNetwork is present but user has disabled background data to save quota.Android “Data saver” iOS “Low Data Mode”.

Each scenario forces the app to rely on locally persisted state, to hide missing data gracefully, and to resume correctly when the link returns. The checklist below treats each as a separate test condition unless noted otherwise.

Business impact of offline failures

When offline handling is weak, users experience:

Quantitatively, a 2025 study of 12 million sessions found that apps with poor offline recovery saw a 23 % increase in abandonment after the first network hiccup. The checklist aims to eliminate those leak points.

---

Happy Path Tests

Core functionality persists

Goal: Verify that the primary user journey completes without network.

StepActionExpected resultPass criteria
1Launch app in airplane mode.Home screen loads, showing cached data (if any).UI appears within 2 s, no error dialog.
2Navigate to a feature that normally fetches remote data (e.g., product catalog).Cached version displays; placeholder indicates “offline”.No blank screens, placeholders present.
3Perform a core action (e.g., add item to cart, start a workout).Action succeeds locally, UI updates instantly.Immediate feedback, no spinner.
4Attempt to submit the action (e.g., place order).Request is queued locally; UI shows “Pending sync”.No error toast, queue count increments.
5Disable airplane mode, wait for reconnection.Queued requests are sent automatically; UI updates to “Sent”.All pending items cleared within 5 s of reconnection.

Real example: A food‑delivery app lets users browse menus offline, add items to cart, and checkout. When the network returns, the app sends the order and shows a confirmation toast. If step 5 fails, the order is lost—a critical regression.

Data persistence integrity

Goal: Ensure that any data written while offline is correctly stored and later retrieved.

Test:

  1. Enable airplane mode.
  2. Create 50 entities (e.g., notes) via rapid UI taps.
  3. Force‑close the app (swipe away).
  4. Re‑launch offline.
  5. Confirm all 50 notes appear, sorted as expected.

Pass: zero missing or corrupted entries.

Sync after reconnection

Goal: Confirm that the reconciliation logic resolves conflicts without data loss.

Test:

  1. Online, edit a contact’s phone number to “111”.
  2. Go offline, edit same contact to “222”.
  3. Re‑connect.
  4. Verify final server value is “222” (client win) or follows defined policy (e.g., timestamp‑based).

Pass: final state matches policy, no duplicate records.

---

Error Handling Tests

Network loss mid‑transaction

Goal: The app must not crash or leave the UI in an indeterminate state when the connection drops during a request.

Test script (Android Espresso):


@Test fun `order placed loses network`() {
    // enable airplane after clicking place order
    onView(withId(R.id.placeOrderBtn)).perform(click())
    // simulate loss
    adb shell svc wifi disable
    // verify UI shows pending state
    onView(withText(R.string.pending_sync)).check(matches(isDisplayed()))
}

Pass: No exception logged, UI shows pending state, data persists after reconnection.

Graceful degradation of non‑essential features

Goal: Features that require live data (e.g., map tiles, video streaming) should fallback to a usable state rather than blocking the whole app.

Test:

  1. Start video playback online, note network usage.
  2. Switch to airplane mode mid‑play.
  3. Verify video pauses, overlay shows “Offline – tap to retry”.
  4. Tap retry while still offline → toast “No connection”.

Pass: No crash, user can continue navigating elsewhere.

User notifications and feedback clarity

Goal: Users must understand why something is unavailable and what they can do.

Test:

Pass: 100 % of messages meet the guideline.

---

Edge/Boundary Cases

Large data sets offline

Goal: The app must handle situations where the local cache grows beyond typical thresholds (e.g., user saves 10 000 images for offline viewing).

Test:

  1. Pre‑populate cache with 200 MB of images via a background sync.
  2. Go offline, open the gallery.
  3. Scroll fast; measure frame drops (< 16 ms per frame).

Pass: ≤ 2 % jank frames, no OutOfMemoryError.

Intermittent connectivity (flapping)

Goal: Rapid toggles should not cause request storms or duplicate submissions.

Test:

Pass: Request count matches taps, no 500 errors from server.

Battery‑low / power‑save mode

Goal: When the OS imposes background restrictions, the app should still honor user‑initiated offline actions.

Test:

  1. Enable Android Battery Saver (or iOS Low Power Mode).
  2. Go offline, perform a data‑saving action (e.g., draft email).
  3. Verify action completes locally and is queued for later upload.

Pass: No silent failures, queued items persist after reboot.

---

Accessibility Checks

Screen reader compatibility

Goal: All offline‑specific announcements (e.g., “Offline mode – changes saved locally”) must be spoken clearly.

Test:

Pass: Message spoken in full, no extra noise.

Touch target size and spacing

Goal: Offline UI must still meet WCAG 2.1 AA minimums (44 × 44 dp).

Test:

Pass: 100 % compliance.

Color contrast and visual cues

Goal: Users with low vision must discern offline indicators (e.g., banner, icon).

Test:

Pass: No contrast failures.

---

Security and Privacy

Local data encryption

Goal: Sensitive data persisted offline (e.g., authentication tokens, health records) must be encrypted at rest.

Test:

  1. Enable airplane mode, log in, obtain token.
  2. Use adb run-as to pull the app’s private files directory.
  3. Verify token is not readable plaintext (look for base64‑like cipher).

Pass: No plaintext secrets found in offline storage.

Secure deletion on cache clear

Goal: When the user clears offline data, remnants should not remain recoverable.

Test (Android):

Pass: Pattern not found after clear.

Permission handling in offline mode

Goal: Permissions that depend on network (e.g., ACCESS_FINE_LOCATION for live updates) should not be requested unnecessarily while offline, reducing user friction.

Test:

Pass: No premature prompts, correct timing.

---

Performance and Resource Usage

CPU, memory, and battery impact

Goal: Offline processing should not cause excessive resource drain that leads to thermal throttling or premature battery loss.

Test:

Pass: Metrics within thresholds, no sudden spikes.

Launch time offline

Goal: Users expect the app to start quickly even when no network is available to fetch config or remote features.

Test:

Pass: Launch ≤ 1.5 s.

Disk I/O efficiency

Goal: Frequent writes (e.g., queuing network requests) should not cause excessive flash wear or UI jank.

Test:

Pass: Write amplification low, no UI stalls observed.

---

Release Readiness

Regression suite inclusion

Goal: Every offline‑mode checklist item must have an automated test that runs on each CI build.

Table: Sample regression mapping

Checklist IDAreaTest typeFramework
OFFLINE-01Happy path – launchUI EspressoAndroid
OFFLINE-04Error handling – mid‑transaction lossNetwork mockOkHttp + MockWebServer
OFFLINE-12Large data set – scroll perfUI AutomatorAndroid
OFFLINE-18Accessibility – contrastaxe‑androidJavaScript
OFFLINE-22Security – encrypted prefsUnit testJUnit/Kotlin

Pass: 100 % of checklist IDs covered by at least one automated test.

CI pipeline integration

Goal: Fail fast if offline regressions appear.

Example GitHub Actions snippet:


jobs:
  offline-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Android
        uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 33
          target: google_apis
          arch: x86_64
          offline: true   # airplane mode enabled
      - name: Run SUSATest agent
        run: |
          pip install susatest-agent
          susatest explore --apk app-release.apk --offline

Pass: Pipeline green; any failure blocks merge.

Documentation and release notes

Goal: Users and support teams need clear guidance on what works offline and what does not.

Test:

Pass: Documentation matches implementation.

---

Autonomous Exploration with SUSATest

How the agent covers the checklist in one pass

SUSATest’s autonomous explorer treats the app as a black‑box state machine. When launched with the --offline flag, it:

  1. Disables all radios via ADB (or sets the network throttling profile to “none”).
  2. Starts from the launcher activity and performs guided walks: taps, long‑presses, swipes, text entry, and system dialog handling.
  3. Records every UI transition, noting whether a network request was attempted (by intercepting HTTP layer) and whether the app displayed any offline‑specific UI.
  4. After a configurable exploration depth (default 30 s per screen), it enables the radios again and validates that any queued actions were sent correctly.

Because the agent exercises *all* reachable screens without pre‑written scripts, it implicitly validates many checklist items:

The result is a JSON report that maps each observed behavior to a checklist ID, giving you a quick “coverage %” before you even write a single manual test.

Example run output (truncated)


{
  "exploration_id": "susa-2026-04-12-01",
  "device": "Pixel 8 (API 33)",
  "offline_mode": true,
  "screens_visited": 27,
  "checklist_coverage": {
    "OFFLINE-01": "PASS",
    "OFFLINE-04": "PASS",
    "OFFLINE-07": "FAIL – missing snackbar on lost connection",
    "OFFLINE-12": "PASS",
    "OFFLINE-18": "PASS",
    "OFFLINE-22": "PASS"
  },
  "recommendations": [
    "Add a Snackbar with action 'Retry' when network loss detected during order placement.",
    "Increase touch target size for the 'Save draft' button to 48dp."
  ]
}

The engineer can then focus manual effort on the flagged failures, confident that the rest of the checklist is already verified.

---

Manual vs Automated Approaches

AspectManual testingAutonomous exploration (SUSATest)
Setup timeWrite test cases, configure emulators, manually toggle airplane mode.Install agent, point at APK/URL, run one command.
CoverageDepends on tester diligence; easy to miss edge cases like rapid flapping.Systematic state‑space walk; high probability of exercising every reachable screen.
Feedback latencyImmediate visual confirmation, but requires human observation.Machine‑readable JSON/JUnit report; integrates with CI.
CostHigher labor cost for repetitive runs.Low marginal cost after initial agent installation; reusable across builds.
Best forExploratory UX checks, accessibility feel, ad‑hoc scenario reproduction.Regression validation, nightly CI, pre‑release sign‑off.

A balanced strategy uses the agent for nightly regression and manual sessions for usability polishing and complex interruptions (e.g., simulating a phone call while offline).

---

Short Offline‑Mode Checklist (Copy‑Paste Ready)

Tick each item after a test pass; any unchecked box signals work remaining.

---

Closing Takeaways

A robust offline mode is not a nice‑to‑have extra; it is a core quality attribute that directly influences retention, trust, and compliance. By treating offline handling as a first‑class citizen and verifying it with a concrete, repeatable checklist, you turn a fuzzy “it works most of the time” feeling into measurable confidence.

The checklist above gives you a concrete matrix of 30+ items, each with a clear pass/fail rule and a real‑world illustration. You can run the majority of these checks automatically with a modern autonomous explorer like SUSATest, freeing manual testers to focus on subtle UX nuances and edge‑case scenarios that require human judgment.

When you integrate the automated suite into your CI pipeline, publish a simple “Offline‑mode verified” badge, and keep the documentation in sync, you create a feedback loop that catches regressions before they reach users. The result is an app that feels reliable whether the user is on a high‑speed 5G link, in a subway tunnel, or deliberately conserving data—exactly the experience users expect in 2026.

Keep this checklist close, run it early, run it often, and let the data, not guesswork, guide your release decisions. Happy testing.

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