> 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/quickstart.md).

# Quickstart: Your first test

Connect a device, write commands in individual lines, and run them locally from the desktop app.

|                   |                                                                                                  |
| ----------------- | ------------------------------------------------------------------------------------------------ |
| **Time**          | \~10 minutes, most of it device boot                                                             |
| **Platforms**     | Android · iOS                                                                                    |
| **Where it runs** | Locally, on the device connected to your Mac; Real or Emulator/Simulator                         |
| **Watch out**     | On an Android emulator, disable the soft keyboard first — it covers elements and makes taps fail |

## Prerequisites

* Drizz desktop app installed and signed in — see [Download & install](/desktop-app/download-and-install.md) and [Sign in & get access](/desktop-app/sign-in-and-access.md). Work email addresses only
* One Android emulator, iOS simulator or attached physical device, created with the [guided setup wizard](/desktop-app/device-setup-wizard.md) — the supported setup path. Opening the Connect Device screen with nothing connected starts the wizard
* Soft keyboard disabled, on an Android emulator

{% hint style="success" %}
Disable the Android emulator's soft keyboard before the first run. It is the most common cause of unexplained tap failures.

```bash
adb shell ime disable com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
adb shell settings put global show_ime_with_hard_keyboard 0
```

{% endhint %}

## Copy this

A complete test against ShopEase, the demo app used throughout these docs.

{% tabs %}
{% tab title="Android" %}

```
# ShopEase — search for a product and open it

OPEN_APP com.shopease.android
Wait Until 5 Seconds

Validate that the home screen is visible

Tap on the search icon
Wait Until 2 Seconds

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
```

{% endtab %}

{% tab title="iOS" %}

```
# ShopEase — search for a product and open it

OPEN_APP com.shopease.ios
Wait Until 5 Seconds

Validate that the home screen is visible

Tap on the search icon
Wait Until 2 Seconds

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
```

The bundle ID is the only difference from the Android test.
{% endtab %}
{% endtabs %}

## Steps

1. Open the desktop app and go to the **Connect Device** screen.
2. Select the emulator, simulator or attached device and wait for it to show as connected. Unlock a physical Android device first — Drizz refuses a locked device.
3. If the app under test (AUT) is not already installed, use the **Connect Device** modal to browse and select the APK or IPA file from your local device. The app will be uploaded to the connected device.

   Note: If the AUT is already installed, select it from the app list. No upload is required.
4. Create a test file in the editor.
5. Press `/` on an empty line to open the command palette — the authoritative list of supported commands. The editor prompts *"Type '/' for Drizz supported commands"*.
6. Paste the test above.
7. Replace three values: the package name, `running shoes`, and the two screen descriptions, so they match the app under test.
8. Run the test and watch the console panel.
9. Confirm the run banner reads passed and every line carries a green decorator in the editor.

## What you see during a run

* **Live execution** on the connected, one per step, as each step executes.
* Live logs, shows exact reason of every execution, command by command.&#x20;
* **A status decorator** in the editor beside each line: running, passed, failed.
* **Token usage** after execution. Wait steps are free.

A passing run takes 30–60 seconds on a warm emulator. The first run is the slowest: Drizz caches how it resolved each step on each screen, so the second and third runs of the same test are faster; if the test command and respective screen remains same.

## If a step fails

Download Debug Report: Open the before-screenshot of the failing step.

| What you see                             | Fix                                                                                                                  |
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| A screen you didn't expect               | The failure is in an earlier step. Fix that one first                                                                |
| The right screen, element visible        | The description doesn't match. Use the app's exact on-screen text                                                    |
| The right screen, element below the fold | Add `Scroll down until "Add to Cart" is visible` before the step                                                     |
| A spinner, screen mid-load               | Add or lengthen the `Wait Until <n> Seconds` before the step                                                         |
| A popup covering everything              | Dismiss it once in Memory rather than in every test — see [Memory & blockers](/writing-tests/memory-and-blockers.md) |
| A black screen                           | A secure screen. The OS blocks capture there, for Drizz and every other tool                                         |

**Report Issue** lets you report an issue you’re currently experiencing with the platform. Use it to provide details about the problem so the platform team can investigate it.

## Common mistakes

| What you write                           | What happens                                                                                              |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `OPEN_APP` with no package               | Fails by design. The package argument is required                                                         |
| No wait after `OPEN_APP`                 | The next command runs against a splash screen and fails                                                   |
| `Tap on the button`                      | Ambiguous — resolves differently between runs                                                             |
| `Wait until the page loads`              | Not a fixed duration. Write `Wait Until 5 Seconds`                                                        |
| Ten-second waits everywhere as insurance | <p>The suite gets slow and a real timing bug </p><p>stays hidden</p>                                      |
| Wrong scroll direction                   | Scroll direction is determined by the thumb’s movement on the UI, mimicking how a real user would scroll. |

## Next

* [The shape of a test](/writing-tests/writing-tests.md)
* [Command index](/writing-tests/command-index.md)
* [When a step fails](/reports-and-debugging/when-a-step-fails.md)

***

*Last updated: 6 August 2026*
