> For the complete documentation index, see [llms.txt](https://docs.drizz.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.drizz.dev/writing-tests.md).

# Writing tests

- [Drizz AI](https://docs.drizz.dev/writing-tests/chat.md): Describe a flow in plain language and Drizz explores the app and writes the script for you. Android only, best under 25 steps.
- [The shape of a test](https://docs.drizz.dev/writing-tests/writing-tests.md): The structure of a Drizz test: one instruction per line, five beats, and the command palette that lists everything Drizz understands.
- [Command index](https://docs.drizz.dev/writing-tests/command-index.md): Every command Drizz understands, in one table — syntax, what it does, and where the detail lives.
- [Actions](https://docs.drizz.dev/writing-tests/tap.md): Tap an element by describing it in plain English, and the six ways to describe it so only one element matches.
- [Type](https://docs.drizz.dev/writing-tests/tap/type.md): Enter text into a field. Drizz focuses the field, clears what's there, and dismisses the keyboard afterwards.
- [Validate](https://docs.drizz.dev/writing-tests/tap/validate.md): Assert that something is true on screen — presence, state, numbers, or a value you captured earlier.
- [Scroll](https://docs.drizz.dev/writing-tests/tap/scroll.md): Scroll by a fixed amount, or scroll until a target comes into view. Quote the target, give a direction, validate afterwards.
- [MAP\_ACTION](https://docs.drizz.dev/writing-tests/tap/map-action.md): Coordinate-based taps, drags and pinches for map surfaces, canvases and sliders — the least deterministic command in Drizz.
- [System commands](https://docs.drizz.dev/writing-tests/system-commands.md): The nine commands that control the app lifecycle and the device — OPEN\_APP, KILL\_APP, CLEAR\_APP and the rest, in one table.
- [Waits & timing](https://docs.drizz.dev/writing-tests/waits-and-timing.md): Drizz supports fixed-duration waits: where to put them, how to spell them, and why element-conditioned wording is not a substitute.
- [Conditionals](https://docs.drizz.dev/writing-tests/conditionals.md): IF / ELSE IF / ELSE blocks let one script survive apps that show different screens to different users.
- [Variables & data](https://docs.drizz.dev/writing-tests/which-variable.md): The four mechanisms that hold a value in Drizz — Store, SET, dataset variables and placeholders — compared in one table.
- [Variables](https://docs.drizz.dev/writing-tests/which-variable/store-and-set.md): Capture a value from the screen with Store, or assign one with SET. The four right-hand sides SET accepts, and what it rejects.
- [Datasets](https://docs.drizz.dev/writing-tests/which-variable/datasets.md): Datasets supply {{variable}} values from outside your script, bound when a test plan runs. Same script, different data.
- [Lockable pools](https://docs.drizz.dev/writing-tests/which-variable/lockable-pools.md): Lease test data that two runs can't share — logins, phone numbers, accounts. One row per run, released at the end.
- [Modules](https://docs.drizz.dev/writing-tests/modules.md): Write a flow once and call it from every test. Module definition, CALL, parameters, and the limits that apply to them.
- [API](https://docs.drizz.dev/writing-tests/api-steps.md): Call a registered API mid-test to seed data, fetch an expected value, or check the UI against the backend.
- [Memory & Blockers](https://docs.drizz.dev/writing-tests/memory-and-blockers.md): Memory is org-level context attached to your app. Blocker rules dismiss popups automatically, with no step in any script.
- [Authoring rules](https://docs.drizz.dev/writing-tests/authoring-rules.md): The rule list for writing Drizz tests — what to do and what to avoid, with the reason each rule exists.
- [Recipes](https://docs.drizz.dev/writing-tests/recipes.md): Six complete, runnable Drizz tests — login, checkout, multi-app, mobile web, location and data-driven runs.
