> ## 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 Type Reference

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

Branch execution 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.
