# Steps and selectors

What each step type does, how elements are targeted, and why some selectors survive redesigns while others do not.

A step is one instruction. The recorder writes them for you, but understanding the vocabulary makes it far easier to fix a test later, because most maintenance is editing a step rather than re-recording a journey.

![The steps list showing click, type text, and assert steps with per-step actions.](https://testsnag.com/images/docs/building-tests/cloud-recorder-1-recorder.r1.jpg)

Marked on the screenshot:
- The step type. Click, Type Text, Assert, and the rest each behave differently.
- The description. Edit it so the run report reads clearly.
- Replay just this step to check a fix without running the whole journey.
- Edit the step to change its selector or value.
- Drag the handle to reorder steps.

## Step types

- **Click**: press a button, link, or any clickable element.
- **Type**: enter text into a field. The value can contain variables.
- **Navigate**: go straight to a URL rather than clicking your way there.
- **Wait**: pause for a fixed time, or until something appears.
- **Scroll**: move the viewport, which matters for lazy-loaded content.
- **Hover**: reveal menus and tooltips that only appear on hover.
- **Upload**: attach a file from your Files library to a file input.
- **Dialog**: accept or dismiss a native browser alert, confirm, or prompt.
- **Assert**: check that something is true rather than doing anything.
- **Script**: run a saved Node, Python, or TypeScript script mid-flow.
- **Block**: expand a saved group of steps in place.

## How elements are targeted

Every acting step needs to know which element it applies to. The recorder captures a selector at the moment you interact, choosing the most specific stable-looking path it can find. That works well for buttons with stable ids or distinctive text, and less well for elements whose classes are generated by a build step and change on every deploy.

> **Warning:** If a selector contains a long random-looking class name, expect it to break the next time your CSS is rebuilt. Adding a data attribute to the element in your own code and targeting that is the durable fix.

## Editing a step

Click any step in the recorder to open it. You can change its description, adjust the selector or value, mark it continue-on-failure so a non-critical step does not abort the run, and reorder it by dragging. Replaying a single step from the recorder is the fastest way to confirm a fix without running the whole journey again.
