> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Step types

> Detailed reference for every test step type

## Instruction

AI-powered action step. Describe what to do in natural language, and Revyl figures out which elements to interact with.

- **Field**: `instruction` (e.g., "Tap the login button", "Type 'hello' in the search field")
- Supports `{{variables}}` in the instruction text.

## Validation

Assert a condition on the current screen state. Fails the test if the assertion doesn't hold.

- **Field**: `instruction` (e.g., "The home screen is visible", "The price shows $9.99")

## Extraction

Capture data from the screen into a variable for use in later steps.

- **Fields**: `instruction` (e.g., "Get the order confirmation number"), `variable_name` (where to store the result)

## Script

Run custom code in a sandboxed environment. Supports Python, JavaScript, TypeScript, and Bash.

- **Fields**: `code` or select a [library script](/library#scripts), `language`, optional `variable_name` for output

## Manual

Precise device-level actions that don't require AI interpretation. Every Manual sub-type except **Wait** is mobile-only.

| Sub-type | Parameters | Description |
|----------|-----------|-------------|
| **Wait** | `duration` (seconds, 0-1000) | Pause execution |
| **Open App** | `bundle_id` (optional) | Launch app. Empty = test app |
| **Kill Installed App** | - | Force-close the app |
| **Go Home** | - | Press the home button |
| **Navigate** | `url` | Open a deep link |
| **Download File** | `url` or [library file](/library#files) reference | Fetch a file onto the device before a later step needs it |
| **Set Location** | `latitude`, `longitude` | Set GPS coordinates |
| **Set Orientation** | `portrait` or `landscape` | Rotate the device (defaults to `portrait`) |

## Loop (While)

Repeat a block of steps while a condition is true (checked each iteration).

- **Fields**: `condition` (natural language condition), `body` (nested steps)
- Default max iterations: 5

## Decision (If/Else)

Choose a path based on a screen condition.

- **Fields**: `condition` (natural language condition), `then` (steps if true), `else` (steps if false)

## Module

Insert a reusable group of steps from the [Library](/library#modules) into your test. The module's steps execute inline during the run, as if they were part of the test.

- **Field**: `module_id` (select a module by name from the dropdown)
- Changes to the module apply automatically to every test that imports it.
