Why Retest
See what Retest does differently, why, and what it does not do yet.
Retest does not wrap another automation library. It has its own runner, its own driver for each browser and its own reports. Because it owns each layer, it can say what happened at each one.
Outcome unknown Link to Outcome unknown
A browser can be lost in the middle of an action. If it is lost before the input goes, the test ends session_lost. If it is lost after, Retest cannot know what the page did, so the test ends outcome_unknown.
Either way, the input is never sent again. A form that may have been submitted is not submitted twice.
No force click Link to No force click
Retest has no option to click through a covered element. Before a click, it checks that the element is visible, stable, enabled and not covered. Then a guard in the page watches the click itself.
If the press lands on another element, Retest stops the event before the page hears it. The action fails and names the element that took it.
Secrets stay outside the test Link to Secrets stay outside the test
A test names a secret with secret('password'). The test's process never holds the value: Retest's own process types it into the field. The environment variable it came from is removed from the test's environment.
Every value is written as {{password}} in events, logs, results and reports. Secrets and sign-in has the details.
One session contract Link to One session contract
Every driver answers the same contract. A command goes in, and the answer says what happened and how far the input got: not sent, sent or unknown. So the runner, the checks and the reports work the same way on every platform.
Checks judged twice Link to Checks judged twice
The test's process asks Retest's process to look at the page, and Retest records every look. When a check on an element passes, Retest judges it again on the look it names. A test file cannot report a pass the page did not show.
Versioned evidence Link to Versioned evidence
Each run writes events.jsonl, one event per line, and result.json at the end. Both follow schema version 1, and the package ships their JSON Schemas. Every event says which process reported it.
A run that stopped early has no result.json. Retest rebuilds its result from the events and marks it incomplete, so it never reads as a pass.
Not built yet Link to Not built yet
- Android apps, Windows, and real phones and tablets.
- Locators inside shadow DOM and frames.
- Dialogs, popups, uploads and downloads.
- Network mocking and visual comparison.
- Retries, custom fixtures and watch mode.
- An MCP server for coding agents.
Coming soon lists what is planned, in order.