> ## Documentation Index
> Fetch the complete documentation index at: https://docs.testorim.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run and inspect a test

> Watching a run happen, and reading what it left behind.

## While it runs

Three things update live.

* **The browser panel** shows screenshots of the real page, roughly twice a
  second.
* **The execution bar** lists the steps, each turning from pending to running
  to passed, failed or skipped.
* **The chat** receives the report when the run ends.

You can cancel at any point. Cancelling marks the run and tears down the
browser within seconds rather than waiting for a timeout.

## The report

The report opens with a header line:

```text theme={null}
Steps: 7 passed · 1 failed · 2 skipped
```

Those counts come from the steps, not from prose. The write-up is forbidden
from stating its own numbers, because a narrated count that disagreed with the
steps is how a broken test reads as a healthy one.

Below that, a walkthrough. What it quotes is what was observed:

* the state read back **off the element** after an assertion: `enabled`, the
  text it actually held, the value in the input, or `not present`
* the address the page was on when the step acted, when the app moved it
  mid-step
* the network call a step's API assertion matched, with its status

And what it does not do: infer an attribute nobody looked at, or claim the
site failed because a step could not find an element.

## Why a step failed

Each failed step carries a cause, and the report describes it accordingly.

| Cause           | Reads like                                                                                                         | What to do                                    |
| --------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------- |
| **app**         | "The site returned HTTP 500 for that page."                                                                        | A real defect. File it.                       |
| **test**        | "Could not find an element matching 'Provision Worker'. The page shows a Users list with an 'Invite user' button." | Fix the step, or the page changed shape.      |
| **unsupported** | "Checking that an email arrived is outside what a browser step can observe."                                       | Check it somewhere else.                      |
| **internal**    | "Internal error (browser evaluation failed)."                                                                      | Ours. Please [report it](/resources/support). |

[Debugging a failed run](/test-execution/debugging) walks through each of
these.

## The run page

Every run has a permanent page at `/runs/<run-id>` holding more than the chat
report shows:

* The final screenshot, and a screenshot at the moment of each failed step
* Per-step before/after snapshots: URL, page title and visible text
* Console messages and network requests captured during each step's window
* Accessibility findings from the scan of the finished page
* Performance metrics for each page that loaded, and any budget breach
* Visual diffs (baseline, actual and difference side by side) for steps with
  a baseline
* Video and trace artifacts

## Sharing a run

**Share** on a run page mints a public link. It is a 128-bit token, optionally
expiring, revocable at any time, and the page it serves is sanitised: no
cookies, no environment headers, no browser storage state, no console or
network detail. Anyone with the link can read the report without a Testorim
account.

## Runs in flight

A toast in the bottom-right corner lists runs currently in progress across the
workspace, grouped by batch, with a cancel button on each. It polls while
anything is running and goes quiet when nothing is.

## Saving the run as a test

**Save as test** turns the run into a procedure that replays without planning.

What gets saved is **what actually worked**, not what was planned: if an Enter
key did nothing and the run recovered by clicking the field's own button, the
saved step is that click. If a typed value was committed by a combobox, the
saved step is the selection. If a click was skipped because the page was
already there, nothing is saved for it.

Coverage gaps are stripped on save. A placeholder for a check the planner
could not fit has no business in a test you replay every night.


## Related topics

- [Create your first test](/getting-started/first-test.md)
- [Start a test run headlessly](/api-reference/runs/start-a-test-run-headlessly.md)
- [FAQ](/resources/faq.md)
- [Mint a new API key (browser session only)](/api-reference/api-keys/mint-a-new-api-key-browser-session-only.md)
- [Test data](/test-creation/test-data.md)
