The shape of a good instruction
Say what to do and what should be true afterwards.Rules that earn their keep
Name things you have actually seen
Name things you have actually seen
Testorim does not know your site’s wording before it opens it, and it will
not invent copy. Write “check the confirmation message appears”, not
“check it says ‘Thanks! Your order #12345 is confirmed.’”, unless you
have read that exact string on the page.A test that asserts invented copy fails against a perfectly healthy site.
One workflow per test
One workflow per test
A plan holds up to 40 steps. That is enough for checkout with cart
arithmetic and a confirmation, but not for sign-up and checkout and
account deletion. Split them, and you also get three independent signals
instead of one.
State the outcome explicitly
State the outcome explicitly
“Check the search works” gives nothing to verify. “Search for ‘backpack’
and check at least one result mentions Backpack” does.If you ask for a check and no step performs it, the run says so rather
than passing quietly.
Be specific when the page is repetitive
Be specific when the page is repetitive
On a listing page, “click the product” is ambiguous and “click the
first product” is not. For a row-scoped control, name the row: “click
Delete in the Blue Top row”.
Use a selector when words fail
Use a selector when words fail
If an element genuinely has no accessible name, label, placeholder or test
id, write its selector as the target:
#order-total, .toast,
[data-testid="cart"]. A target starting with #, . or [ is treated
as CSS and matched exactly.Give slow things room
Give slow things room
For a scrape, import or batch job, raise the time limit and describe the
finished state loosely (“wait until the page shows it is complete”)
rather than guessing the exact completion phrase.
Worked comparisons
Negative tests
Mark a test Should fail when the app is supposed to refuse. The run passes when the action is correctly rejected.Credentials and secrets
Put real credentials in the instruction only for throwaway test accounts. For anything else:- Let Testorim ask: leave the credentials out and it shows a masked form.
- Use variables for values that change per run.
- Use environment cookies and headers for real secrets: they are encrypted at rest and never reach a model.

