Skip to main content
Momentic is a managed testing platform for iOS and Android. Tests are YAML, executed on managed remote emulators and simulators. A multi-modal step cache stores locator metadata per step and auto-heals in place when the UI changes. AI primitives cover action, assertion, visual diff, and typed extraction. AI providers route with cross-provider failover. A dashboard captures run videos, view hierarchies, heal events, and AI reasoning. Appium is an open-source mobile automation framework that exposes the WebDriver / W3C protocol across iOS, Android, and other platforms via swappable drivers (UiAutomator2, XCUITest, Espresso, Flutter, Mac, Windows). Tests are written in TypeScript / Python / Java / Ruby / .NET against the Appium client of choice. It’s a fit for teams that want OSS, multi-language flexibility, physical-hardware support, and deep customization at the driver level, plus the bandwidth to maintain a verbose, locator-heavy codebase.

Speed and caching

How the multi-modal cache works

A cached step stores more than one way to find the target: where it sits on screen, what it looks like, what text it contains, and the accessibility and structural attributes around it. Which of those signals matters for a given step is inferred from the natural-language description. “The red Cancel button below the Order Summary header” leans on visual and positional signals; “the Sign in button” leans on accessibility and text. When a step replays, the runner checks the stored signals against the live UI and runs the action without invoking the LLM when there’s a match.

What happens on a UI change

A practical sequence that shows the difference. Take a sign-in screen whose Email field has accessibilityIdentifier = "email_input", after a passing baseline run where the cache is warm. Refactor: the app team renames email_input to email_field. The XPath position of the field shifts because a container was added above it. Appium replay:
  1. driver.$("~email_input") issues a findElement request against the device. The WebDriver waits up to implicitlyWait (or the configured WebDriverWait timeout) for the element to appear.
  2. The timeout elapses with no match. The client throws NoSuchElementError.
  3. The test stops; the CI job fails. Someone edits the client code to use the new accessibility ID (or rewrites the XPath against the new hierarchy), opens a PR, gets it merged, and re-runs CI. If the XPath path was deep, the edit can cascade across multiple steps.
Momentic replay:
  1. The cached locator for the Email step misses on the live device.
  2. The locator agent re-resolves the original natural-language description Email.
  3. The new locator binds, the step runs, the test passes.
  4. The cache entry is updated in place. A heal event is attached to the run for review. Subsequent runs hit the cache normally.
Across a test suite this is the difference between a renamed-ID incident and a no-op.
Smart waitingMomentic’s default smart wait is 3000ms and configurable per test. The runner waits on a combination of navigation, load, screenshots, DOM / view-hierarchy mutations, and same-origin requests until the UI is quiet or the timeout elapses.Appium waiting
  • implicitlyWait is per-driver. Too low -> flakes; too high -> padded runs.
  • Explicit waits (WebDriverWait + ExpectedConditions.visibilityOfElementLocated, presenceOf, elementToBeClickable) are per query. Common to layer 3-5 explicit waits per logical step.
  • No notion of network quiescence; teams instrument their own request interceptors or poll the UI.

Locators and AI primitives

Momentic mobile step types
  • Action: act, tap, doubleTap, longPress, type, swipe, scroll, back, dismissKeyboard, launchApp, terminateApp
  • Assert: assert, assertVisually, checkElement<...>
  • Extract: extract (typed via JSON schema)
  • Control flow: if/then, modules, parameter inputs
Appium locator trade-offs
  • accessibility id is the most stable strategy but only exists when developers explicitly set contentDescription (Android) / accessibilityIdentifier (iOS). Production apps frequently miss them on dynamic content.
  • id (resource-id on Android) breaks under refactors and A/B testing.
  • xpath is the catch-all but is slow on large hierarchies and breaks on any structural change.
  • -image does template matching; works for static images, fails on themed UIs.
  • No locator strategy carries semantic intent. A failing step has no description to recover from.

Recovery, quarantine, and CI

Sharding: --shard-index <i> / --shard-count <n>. Deterministic, contiguous partition of the test suite.Device provisioning: each test gets its own device session, so parallel runs don’t share device state. No per-test execution cap.Appium grid: Appium servers run locally or in a Selenium Grid. Device farms layer their own provisioning on top. Common issues: stale UI hierarchies between sessions, dangling driver processes, capability drift across drivers and OS versions.

Authoring side-by-side

Agentic simplified format:
Explicit simplified format (same flow, step-by-step):

A more realistic test

The hello-world above doesn’t show the full simplified format surface. A representative onboarding regression with module reuse, parameter inputs, typed extraction, and a conditional looks like this:
onboarding.test.yaml
The matching module:
../modules/sign-in.module.yaml
There is no equivalent first-class surface in Appium. Reuse is by extracting host-language helpers; extraction is whatever the client codes; conditionals are if in the host language; visual assertions need a third-party plugin.

When to pick which

Appium is the right call if you have an existing Appium test suite the team wants to keep, you have a hard requirement for an OSS WebDriver-protocol layer, you need multi-language clients, or you do deep customization at the driver level (custom plugins, native command extensions). Momentic is the right call if wall-clock run time matters at scale, selector maintenance is a real recurring cost, you want AI assertions that fail the test by default, you’d rather author in YAML than maintain a multi-language WebDriver codebase, and you expect healing, recovery, quarantine, sub-second emulator boots, and run videos built in. For the build-it-yourself version of this decision, see Build vs. buy.