> 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/start-here/introduction.md).

# Introduction

Drizz automates mobile apps from plain-English instructions, resolving each target visually at run time.

|                         |                                                                                                                                             |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Platforms**           | Android · iOS · Mobile web                                                                                                                  |
| **What you write**      | Plain English, one instruction per line                                                                                                     |
| **What you don't need** | No selectors, no XPath, no accessibility IDs etc                                                                                            |
| **Portability**         | The same file runs on Android and iOS                                                                                                       |
| **Watch out**           | Ambiguous descriptions resolve to different elements between runs — use the app's exact visible wording for better control and stable tests |

## A test looks like this

```
# ShopEase — search for a product

OPEN_APP com.shopease.android
Wait Until 5 Seconds

Validate that the home screen is visible

Tap on the search icon
Type running shoes in the search field
Tap on the first search result
Wait Until 3 Seconds

Validate that the product detail page is visible
```

No setup file, no page objects, no element locators.

## What Drizz does not require

|                                |                                                                                                                                                                                               |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **No selectors**               | <p>A step names the element as it appears: <br><code>Tap on Login CTA</code>, <br>not <code>driver.findElement(By.id("btn\_login\_primary"))</code>. Renaming an ID does not break a test</p> |
| **One script, both platforms** | A step describes intent; Drizz resolves it against the current screen. Some commands differ per platform — see [Known limitations](/reference/known-limitations.md)                           |
| **No instrumentation**         | No SDK, no debug build, no test code in the app. Drizz drives the app from outside                                                                                                            |

## How a step executes

Every line runs through the same five stages.

| Stage            | What happens                                                                                                                  |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **1 · Capture**  | The system captures the current screen and uses available visual context to better understand what’s displayed.               |
| **2 · Classify** | The line is routed to a command type — tap, type, validate, scroll, system. The first word of the line determines the routing |
| **3 · Locate**   | Vision AI finds the target described and returns its position. This stage fails when a description is ambiguous               |
| **4 · Act**      | The tap, type or swipe happens at that position                                                                               |
| **5 · Verify**   | Drizz confirms the screen changed as the step implies. A `Validate` gets up to **3 attempts** before failing                  |

Note: The 3 attempts do not replace a wait. Add `Wait Until <n> Seconds` before a step that runs after navigation — see [Waits & timing](/writing-tests/waits-and-timing.md).

## Automatic behavior

|                |                                                                                                                                                                                                                   |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Caching**    | Drizz reuses how it resolved a step on a screen it has seen before. Cached steps run faster and cost fewer DT, so a suite speeds up over its first few runs. See [Caching](/running-tests/caching.md)             |
| **Unblocking** | A popup in the way — a permission prompt, a promo sheet, a network retry — is dismissed using the app's blocker rules, with no step in the script. See [Memory & blockers](/writing-tests/memory-and-blockers.md) |

## Common mistakes

| What you write                                             | What happens                                                                                                                                                 |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Tap on the button`                                        | Resolves to a different element depending on screen state. Quote the element's visible label                                                                 |
| `Tap on Proceed to Pay` when the button reads `Charge Now` | Paraphrasing misses the element, or hits the wrong one. For strict logic use double quotes, else the test runs purely on the intent to pass the screen state |
| `Scroll` with no direction                                 | Unreliable. Always give a direction and quote the target                                                                                                     |

## Next

* [Quickstart: your first test](/start-here/quickstart.md)
* [Platform & device support](/start-here/platform-support.md)
* [Use cases](/start-here/use-cases.md)

***

*Last updated: 6 August 2026*
