Start with the cause, not the prose
Every failed step is labelledapp, test, unsupported or internal. That
label is set where the failure was raised, not guessed afterwards from its
wording. It tells you where to look before you read a word of the report.
1
Cause is app
The site misbehaved. Open the failure screenshot and the assertion’s actual
value. They are the bug report.Typical: an HTTP 5xx from a navigation, an element that should have
disappeared and did not, a control that stayed disabled, a submit that
changed nothing on the page.
2
Cause is test
The step does not match the page. The message names what is actually
there. Go to the section below that matches it.
3
Cause is unsupported
The check is outside what a browser can observe: an email that was sent,
an SMS, a server log. Verify it somewhere else, or use a
database assertion
if the evidence lands in a table you can read.
4
Cause is internal
Our runner broke, and the report says so rather than blaming your site.
Please send us the run id.
Common test failures
Could not find an element matching …
Could not find an element matching …
The message lists what the page does show. Read that first. Usually the
target is named differently than you assumed, or the flow never reached
that screen.Fixes, in order of preference:
- Use the wording actually on the page.
- Name the row for a row-scoped control: “Delete in the Blue Top row”.
- Use a selector target:
#order-total,[data-testid="cart"].
Ambiguous target, N candidates
Ambiguous target, N candidates
More than one element matches and guessing would be worse than failing.
The message lists the candidates.Add an ordinal (“the first product”), name the containing row, or use a
selector that matches exactly one element.
The typed value did not persist
The typed value did not persist
Testorim types, waits for the page to re-render, and reads the field back.
If what came back is not what was sent, the step fails. A green step on a
field that silently cleared is worse than a red one.Usually the app cleared it: a validator, an autosave, an autocomplete that
committed something else, or a related toggle re-rendering the form. The
warning at the end of a run (“typed value X is no longer present in any
visible input”) catches the delayed version of the same thing.
Unsupported assertion condition
Unsupported assertion condition
The condition is not in the grammar, and the message lists what is. See
Assertion conditions.
A state condition on something with no such state
A state condition on something with no such state
disabled, checked, value: and friends are only meaningful on a
control. If the target bound to a paragraph, the step refuses rather than
reporting the paragraph’s imaginary state as an app defect.Point the target at the control, by name, by control noun, or by
selector.Absence could not be certified
Absence could not be certified
A
hidden or absent check needs evidence that the thing was ever there,
on this page, and that the page is still alive. When one of those is
missing the step fails and names which.Fix: assert the element is visible before the action that removes it.
That single extra step gives the absence check its provenance.When the report and your eyes disagree
Trust the screenshot and theactual value. Both are recorded, neither is
generated.
If a report describes something the screenshot contradicts, that is a bug in
Testorim and we want the run id.

