Skip to content

Step reference

Every step type AutoTestX supports, with all of its parameters. The editor builds its forms from the same registry (packages/dsl/src/registry.ts), so the names here match the editor.

How to read the tables

  • Type is the name stored in the test file ("type": "click"). Label is what the editor shows.
  • Target: whether the step acts on an element and needs a target.
  • Engines: web only, or all (web, Android, iOS).
  • Parameter kind: template means literal text in which {{…}} is substituted; expression means the whole field is one expression; fixed means the text is used exactly as written.
  • Every step also accepts the common settings below.
Setting DSL field Meaning
Step name label Name shown in the editor and reports
Timeout timeoutMs Time limit for this step. Default: the test’s default (30 s).
Retries retry Extra attempts after a failure. Default: the test’s default (0).
On error onError abort, continue or ignore. See Error handling.
Soft assertion soft Validation steps: record the failure, continue, fail the run at the end
Skip this step disabled Keep the step but do not run it

After every Browser and Interaction step, the runner waits for the page to settle (navigation, pending requests) before the next step, so steps see the page a person would see.


Navigate to a URL. Target: no. Engines: web.

Param Kind Required Default Meaning
url template yes Address to open, e.g. {{baseUrl}}/orders
waitUntil fixed load When navigation counts as done: load, domcontentloaded, networkidle

Back — browser.back · Forward — browser.forward · Refresh — browser.refresh

Section titled “Back — browser.back · Forward — browser.forward · Refresh — browser.refresh”

Browser history back, forward, and reload. No parameters. Target: no. Engines: web.


Click an element. Target: yes. Engines: all. Healable.

Param Default Meaning
button left left, right, middle
force false Click even if the element looks covered or not ready. Use sparingly.

Double-click an element. No parameters. Target: yes. Engines: all.

Type a value into a field. Target: yes. Engines: all.

Param Kind Required Default Meaning
value template yes Text to type, e.g. {{secret.APP_PASSWORD}} or PO for {{vendor}}
clearFirst true true: replace the field’s content in one go. false: type key by key after the existing content (for fields that react to each keystroke).
sensitive false Treat the typed value as a secret: masked in reports and logs

Empty a field. No parameters. Target: yes. Engines: all.

Choose an option in a dropdown (<select>). Target: yes. Engines: web.

Param Kind Required Default Meaning
value template yes The option to choose
by value Match the option’s value attribute, its visible label, or its index (0-based)

Set a checkbox or radio button. Target: yes. Engines: all.

Param Default Meaning
checked true true to tick, false to untick

Attach files to a file input. Target: yes. Engines: web.

Param Kind Required Meaning
files template yes One path per line. Absolute paths are used as-is. Relative paths are resolved against the server’s files folder, <ATX_DATA_DIR>/files (CLI: the --files folder, default the test file’s folder).

There is no screen for adding files to the files folder yet. An administrator copies them there (e.g. /var/lib/autotestx/files/invoice.pdf, then files = invoice.pdf). The folder is shared by all projects on the server.

The target may be the <input type="file"> itself or a styled Browse button. For a button, the file chooser it opens is intercepted, because operating-system dialogs cannot be driven.

Move the mouse over an element, e.g. to open a menu. No parameters. Target: yes. Engines: web.

Press a key or chord on the page. Target: no. Engines: all.

Param Required Meaning
key yes Playwright key name: Enter, Tab, Escape, ArrowDown, Control+A, Shift+Tab

Choose values in a lookup dialog, searching its pages for each one. Target: yes (the opener, the button or icon that shows the lookup). Engines: web. Block: its children are optional setup steps replayed inside the lookup before searching (e.g. type in the search box, click Search).

Param Kind Required Default Meaning
values template list yes* The values to choose, found by identity (text), never by row position. Up to 100. *Not needed for cancel.
completion yes select: clicking a value chooses it and closes the lookup (one value only). ok: select every value, then click OK. cancel: dismiss the lookup.
match equals equals or contains
column Header of the result column the values appear in, when there are several
selection persistent: selections survive paging. pageLocal: paging drops selections, so all values must be on one page.
selectBy click click the value, or tick its row’s checkbox
maxPages 25 Most result pages to search (max 500)
window false The lookup opens in its own browser window
verifyUnchanged false cancel only: fail if the parent field’s value changed. Needs the field control.
controls Targets for the lookup’s own parts: dialog, result, next, previous, ok, cancel, searchField, searchButton, field
history What the tester did while recording, kept for review and never replayed

Rules: ok needs the ok control; cancel needs the cancel control; select takes one value. A retry dismisses the lookup and starts again from scratch. Usually created by the recorder.


All validation steps can be soft (see Error handling). A failed assertion reports expected and actual.

Assert an element exists in the page. Target: yes. Engines: all.

Param Default Meaning
negate false true: assert it does not exist

Assert an element is visible. Target: yes. Engines: all.

Param Default Meaning
negate false true: assert it is not visible

Assert an element’s text (trimmed). Target: yes. Engines: all.

Param Kind Required Default Meaning
expected template yes Expected text
match equals equals, contains, regex
negate false true: assert it does not match

Assert the value of a form field (exact match). Target: yes. Engines: all.

Param Kind Required Meaning
expected template yes Expected value
negate true: assert it is not this value

Assert an attribute of an element (exact match). Target: yes. Engines: all.

Param Kind Required Meaning
name fixed yes Attribute name, e.g. aria-disabled, href, class
expected template yes Expected value. A missing attribute counts as "".
negate true: assert it is not this value

Assert the current page address. Target: no. Engines: web.

Param Kind Required Default Meaning
expected template yes Expected URL
match equals equals, contains, regex

Assert that an expression is true. Target: no. Engines: all.

Param Kind Required Meaning
expression expression yes Must evaluate to true/false, e.g. STARTS_WITH(poNumber, 'PO-') AND LENGTH(poNumber) > 3

Wait a fixed time. Target: no. Engines: all. Prefer Wait for element or Poll API; fixed waits make tests slow and flaky.

Param Required Meaning
ms yes Milliseconds, 1 to 300000

Wait for an element to reach a state. Target: yes. Engines: all.

Param Default Meaning
state visible visible, hidden, attached (in the page, maybe hidden), detached (removed). For hidden/detached, an element that cannot be found counts as success.

Wait until network activity settles. Target: no. Engines: web.

Param Meaning
idleMs Accepted but currently ignored: the step waits for the browser’s standard network idle state, limited by the step timeout

Capture a screenshot into the run report. Always captured, whatever the screenshot setting of the run. Target: no. Engines: all.

Param Default Meaning
name Name for the image
fullPage false Capture the whole scrollable page, not just the window

Run the child steps when a condition is true, otherwise the otherwise (orElse) steps. Target: no. Engines: all.

Param Kind Required Meaning
condition expression yes e.g. {{status}} == 'Approved' or COUNT(lines) > 0

Repeat the child steps for each item of a list. Target: no. Engines: all.

Param Kind Required Default Meaning
items expression yes A list, e.g. lines (a test variable) or orders.body.items
as fixed yes Name of the loop variable, e.g. line. Inside: {{line.item}}.
maxIterations list length Upper bound (max 10000)

items must be a list, or the step fails.

Repeat the child steps a fixed number of times. Target: no. Engines: all.

Param Required Meaning
times yes 1 to 10000
as Optional counter variable, starting at 0

Repeat the child steps while a condition holds. Target: no. Engines: all.

Param Kind Required Meaning
condition expression yes Checked before each iteration
maxIterations yes Ceiling (max 10000). Reaching it fails the step.
maxDurationMs Time ceiling (max 1800000). Exceeding it fails the step.

Every loop has a ceiling, so a misbehaving application ends the test with a clear failure instead of hanging.


Read a value from an element into a runtime variable. Target: yes. Engines: all.

Param Required Default Meaning
saveAs yes Variable name, e.g. poNumber. Later steps use {{poNumber}}.
from text text (visible text, whitespace normalised), value (form field value), attribute
attribute Attribute name when from is attribute

Extracted values are always text. Use NUMBER(x) to compare them as numbers.

Set a runtime variable from an expression. Target: no. Engines: all.

Param Kind Required Meaning
name fixed yes Variable name
value expression yes e.g. CONCAT('Vendor ', NOW()), COUNT(lines), qty * 2

value is an expression, so text needs quotes: 'Approved', not Approved.

Run a sandboxed JavaScript or TypeScript snippet. Target: no. Engines: web. Needs the Write custom code permission to create or change. See Custom code.

Param Required Default Meaning
source yes Function body, up to 20000 characters. return a value or throw to fail. Not a template.
language javascript javascript or typescript
assignTo Variable for the returned value. Empty: the step is a check.
secrets none Secret names the code may read (max 20)
timeLimitMs 1000 CPU time (max 10000; the step timeout also applies)

Run a pinned version of a component. Target: no. Engines: all.

Param Kind Required Meaning
componentId yes The component
version yes The pinned version number. Never “latest”.
arguments template map Parameter name → value, evaluated in the caller’s scope

Send an HTTP request and remember the response. Target: no. Engines: web. Shares the browser session’s cookies. See API testing.

Param Kind Required Default Meaning
url template yes Absolute URL
method GET GET, POST, PUT, PATCH, DELETE, HEAD
headers template map Header name → value
body template Request body as text; JSON is detected
expectStatus any 2xx 201, 2xx, 200,204, any
saveAs Variable receiving { status, ok, headers, body, durationMs }
sensitive false Mask the response body in reports and variables

Repeat an HTTP request until the response meets a condition. Target: no. Engines: web. All http.request parameters, plus:

Param Kind Required Default Meaning
until expression yes Checked after each response, available as response
intervalMs 1000 Pause between requests (max 60000)
maxAttempts until timeout Most requests (max 1000). The step timeout always limits the poll.

Web only All engines
Open, Back, Forward, Refresh, Select, Upload file, Hover, Lookup, URL, Wait for network, Custom code, HTTP request, Poll API Click, Double click, Type, Clear, Check, Press key, Exists, Visible, Text, Value, Attribute, Expression, Wait, Wait for element, Screenshot, If / Else, For each, Repeat, While, Extract, Set variable, Call component

Changing a test’s engine re-validates every step against this table. Only the web engine is implemented today.