Skip to main content
Momentic is a managed testing platform for the web. Tests are YAML, executed on a managed runner. 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 behind a single managed surface. A dashboard captures run videos, traces, network, heal events, and AI reasoning. Selenium is the original open-source browser automation project. It drives browsers through the W3C WebDriver protocol with bindings in Java, Python, C#, Ruby, and JavaScript, manages drivers with Selenium Manager, and distributes runs across Selenium Grid. It’s well-suited to teams that want the broadest language and browser support, a hard OSS WebDriver-protocol requirement, or have a large existing Selenium codebase to keep.

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 structural and accessibility 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 Submit button in the form” leans on structure and role. When a step replays, the runner checks the stored signals against the live page and runs the action without invoking the LLM when there’s a match. On a miss, the locator agent (auto-heal) re-resolves the original description against the live page, updates the cache entry in place, and the run continues. A heal event is recorded against the run.

What happens on replay

Take a passing Selenium test suite, then the next day the team ships two changes: the welcome banner copy changes from Welcome, Ada to Hi Ada, welcome back, and the submit button’s id is renamed from submit to submit-btn. Selenium replay:
  1. driver.find_element(By.ID, "submit") issues a lookup. With an implicit wait, the driver polls until the timeout, finds nothing because the id was renamed, and raises NoSuchElementException.
  2. The explicit wait for the old welcome copy (WebDriverWait(...).until(EC.text_to_be_present_in_element(...))) elapses and raises TimeoutException.
  3. The CI job fails. A maintainer edits the selectors and the waits, opens a PR, gets it reviewed, and re-runs CI. If the broken locator was an XPath, the edit can cascade across steps.
Momentic replay:
  1. click steps hit the cache. On the renamed button the cached locator misses, so the locator agent re-resolves the original description Sign in against the live page, binds, and updates the entry in place. A heal event is recorded.
  2. assert: The dashboard chart is visible and not cut off is evaluated by the assertion agent against the current page state. The agent reasons over the intent of the assertion, not a literal string match, so the reworded banner doesn’t trip it.
  3. The test passes. No code review needed.
Momentic smart waitingThe default smart wait is 3000ms and configurable per test. The runner waits on a combination of navigation, load, screenshots, DOM mutations, and same-origin requests until the page is quiet or the timeout elapses.Selenium waiting, for contrast
  • implicitlyWait is global per driver. Too low causes flakes; too high pads every run.
  • Explicit waits (WebDriverWait + ExpectedConditions.visibility_of_element_located, presence_of, element_to_be_clickable) are per query. It is common to layer several explicit waits per logical step.
  • There is no notion of network quiescence; teams poll the DOM or instrument their own request hooks.

Locators and AI primitives

  • By.id / By.name are stable when present, but break under refactors and A/B testing, and dynamic content frequently lacks them.
  • By.cssSelector breaks on restyle or restructure.
  • By.xpath is the catch-all but is slow on large DOMs and breaks on any structural change.
  • No locator carries semantic intent. A failing step has no description to recover from.

Recovery, quarantine, and CI

Authoring side-by-side

Agentic simplified format:
Explicit simplified format (same flow, step-by-step):
No explicit waits to tune, no literal selectors, and no string-match assertions to maintain.

A more realistic test

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

When to pick which

Selenium is the right call if you have a large existing Selenium test suite the team wants to keep, you need the broadest language and browser support including legacy targets, or you have a hard requirement for an OSS WebDriver-protocol layer. Momentic is the right call if selector and wait maintenance is a real recurring cost, you want locators that re-resolve and heal on UI changes instead of failing, you want AI assertions and visual checks that fail the test by default, you’d rather author in YAML than maintain a WebDriver codebase, and you expect healing, recovery, quarantine, and a managed dashboard with run videos built in. For the build-it-yourself version of this decision, see Build vs. buy.