Documentation
A reference for every test step: what each step does, which fields it takes and how to use it.
I see
Assert that text is visible on the page.
I don't see
Assert that text is NOT on the page.
Click
Click an element. Pass visible button/link text or a CSS selector.
Wait
Wait for text
Wait for text to appear on the page. Format: text|seconds.
Go to page
See element
Assert that an element exists and is visible.
Don't see element
Assert that an element is absent or hidden.
Element has class
Assert the element has the given CSS class. Format: selector|class_name (without dot).
Element does not have class
Assert the element does NOT have the given CSS class. Format: selector|class_name (without dot).
Fill form
Fill several fields of one form at once. Enter the form name (visible text: "Sign in", "Sign up") and press "Find fields" — the system opens the page at this step and lists all visible form fields. Enter values, remove the extra ones. You can also enable form submission.
Double click
Double-click an element.
Right click
Right-click an element (opens context menu).
Hover over element
Hover the cursor over an element (triggers hover effects, dropdowns, etc.).
Drag and drop
Drag one element onto another. Format: source_selector|target_selector.
Press key
Press a key while focused on an element. Format: selector|key.
No console errors
Assert that no JS console errors (console.error or uncaught exceptions) happened. Tracking starts at the first occurrence of this step in the scenario.
No global variable
Assert that a given variable is NOT defined on window. Used to verify XSS payload did not execute.
Close modal window
Close an open modal/popup (quiz, lead form, gallery). No parameters needed — it closes automatically: close icon → Escape → backdrop click. Put it after the modal content checks («See») so the window does not cover the following steps.
Type text char by char
Type text character by character (like a real user). Format: selector|text.
No alert/confirm/prompt
Assert no alert()/confirm()/prompt() dialog was shown. Dialogs are auto-dismissed, but the step fails if any appeared.
Set viewport size
Set browser viewport size (responsive testing). Format: width|height in px.
Mobile layout check
Comprehensive mobile layout assertion: <meta name="viewport"> presence, no horizontal scroll, no elements overflowing the viewport, no tiny tap-targets (<32px). Does not change viewport size — put «Set viewport size» with a mobile size (e.g. 375×812) before this step.
Has meta viewport
Assert that <meta name="viewport"> tag is present in the page head (mobile-friendly).
No horizontal scroll
Assert that the page has no horizontal scroll (scrollWidth ≤ clientWidth). Catches mobile-layout breakage.
Wait for video data to load
Wait for a network response carrying video data (a manifest or a stream segment) — confirms the player started fetching video. With no parameters it catches default media traffic (HLS .m3u8, DASH .mpd, .ts/.m4s segments, progressive .mp4/.webm, by Content-Type). Format: pattern[,pattern2]|seconds — your own URL substrings (defaults then off) and/or a timeout.
Video is playing
Assert that a video is actually playing on the page, not just a poster/Play button being rendered. The step finds the main player itself (walks iframes and shadow DOM, picks the visible, largest <video> among several, ignoring ads/previews) and samples time twice: if currentTime advances and the stream is ready, the step passes (live streams too). The parameter is optional: minimum time advance in seconds per sample (default 0.2). Fails with a clear reason if the video is paused, buffering, ended, or errored. Will not work on a cross-origin embedded player (third-party iframe — browser restriction) or DRM/canvas video — the step reports this explicitly. Put it after clicking Play.
Select from dropdown
Pick a value in a <select> dropdown. Format: selector|value.
Check checkbox
Tick a checkbox or radio button.
Uncheck checkbox
Untick a checkbox.
Clear field
Clear the contents of an input field.
Focus element
Focus an element (as if the user clicked into it).
Go back
Click the browser Back button — go to the previous page in history.
Go forward
Click the browser Forward button — go to the next page in history.
Reload page
Reload the current page (like pressing F5).
Check URL
Assert that the current URL contains the given substring.
Check page title
Assert that <title> contains the given text.
Check field value
Assert that an input field has the expected value. Format: selector|value.
Check element attribute
Assert an element attribute equals a value. Format: selector|attr_name|expected_value.
Check element count
Assert the number of matching elements. Format: selector|count.
Wait for URL change
Wait for the URL to contain a substring. Format: url_part|seconds.
Wait for page load
Wait for a page load state.
Scroll to element
Smoothly scroll the page to an element (it ends up in the viewport).
Scroll by pixels
Scroll the page by pixels. Format: x|y (negative = up/left).
Grab attribute and send
Grab an attribute value and POST it. Format: selector|attribute|url.
Grab page URL and send
Grab the current page URL and POST it to your address.
Grab page title and send
Grab the <title> and POST it to your address.
Set Cookie
Set a cookie for the current domain. Format: name|value.
Set LocalStorage
Write a value to localStorage. Format: key|value.
Full page screenshot
Take a screenshot of the entire page, including content below the fold (with scrolling).
Save page as PDF and send
Save the current page as PDF and POST it to your address (Chromium only).
Emulate media type
Emulate CSS media type.
Set HTTP headers
Add HTTP headers to every request. Format: Header:Value,Header2:Value2.
Wait for server response
Wait for a network response. Format: url_pattern|seconds.
Wait for element
Wait for an element to appear. Format: selector|seconds.
Fill field
Fill an input field. Format: selector|value.
Grab text and send
Grab text from an element and POST it to your URL. Format: selector|url.
Grab text and send as a message
Sends you a message straight from the scenario — a parsed price, stock left, an order number. The step never fails the test: if the element is not found or the message cannot be delivered, it is noted in the step log and the scenario goes on. Format: selector_or_text|email|channels.
Grab full page content
Grab all visible text from the page and POST it to your URL.
Execute JS and send result
Run a JS snippet and POST its result. Format: js|url.
Execute JS script
Run arbitrary JavaScript in the page context.
Full page audit
Full audit of the current page — the one the scenario is on at this step. No parameters. Its main purpose is auditing the area behind authentication (account/dashboard): add the login steps, then «Full page audit». Only this single page is audited, no link crawling. In a test run the result is saved and appears in the «Audits» (cp/audit) list tagged «from scenario»; it collects accessibility (axe), load performance, SSL, broken links, meta/SEO, mobile layout and AI perception of the page (spends AI tokens). In preview/recorder the step runs in a lightweight check mode: it shows a short summary, saves nothing and spends no tokens. Lighthouse is not used.
Switch to another window
Switch to another browser window/tab by name. Pass _ to switch to a newly-opened tab.
Remember text
Remembers an element’s text into a slot for the duration of the test run (cleared afterwards). Two fields: slot (Slot 1–4) and the selector of the element whose text to capture.
Visual regression
Compares the current page with how it looked in previous runs of this same step — catches visual regressions (broken layout, text or an element that moved or disappeared, broken styling). The parameter is the difference threshold in percent of area (default 2%): below it the step passes, above it the test fails. The baseline is this step’s screenshots from the latest runs; the comparison is pixel-based, light render noise and anti-aliasing are ignored, and the “matches at least one of the recent frames” tolerance absorbs minor dynamics. On the first run or after the scenario changes, the baseline is rebuilt from scratch (the step simply passes). If the difference exceeds the threshold, the frame is sent to AI vision to explain what exactly changed (spends the test owner’s AI tokens; if the balance is too low, only the pixel comparison runs, without an AI verdict). The result and verdict appear on the run report page at this step. In preview/recorder it is a stub: the comparison only runs during an actual test run.
Page perception
Visual AI check of the current page. The worker takes a full-page screenshot and sends it to AI vision. If the field is left empty, the question is whether the page is visually fine (is the font readable, is the layout intact, did the styles and images load). If you enter your own question, the AI checks that instead (e.g. «did the video open»). If the AI answers that something is wrong with the page (unstyled raw HTML, overlapping/cut-off text, broken-image icons, an empty/white screen) the test fails and the model’s answer becomes the reason. If the AI answers that the page is fine, the step is considered passed and the test continues. It spends the test owner’s AI tokens: the step only runs AI vision when the balance is at least 5000 tokens; below that the check is silently skipped and the balance never goes negative. In preview/recorder it is a stub: the step is marked done, no AI call is made and no tokens are spent.
Unused CSS/JS
Informational step — it never fails the test and does not compare against any threshold; the result is shown in the step card of the run report. Reports the share of unused code — how much of the loaded CSS and JS is not used while rendering the page («dead weight»). The worker reloads the current page with coverage capture (Chromium Coverage API) and computes the percentage of unused bytes plus the «heaviest» files. No parameters — the current page is checked.
Schema.org microdata
Informational step — it never fails the test; the result is shown in the step card of the run report. Validates Schema.org microdata (JSON-LD) on the current page against Google Rich Results and Yandex requirements. Required and recommended fields of popular types are checked (Organization, Product, Offer, BreadcrumbList, Article, FAQPage, Event, etc.), plus broken JSON-LD blocks and the complete absence of markup. The report shows whether there is markup, broken JSON, and which required fields are missing (so a search engine may not show a rich snippet). No parameters.
Interactive feedback
Informational step — it never fails the test; the result is shown in the step card of the run report. Checks interactive feedback: interactive elements (links, buttons, fields) should give a visual response on hover or focus — background, color, border, shadow, underline, etc. The worker actually hovers and focuses a sample of elements and compares styles before/after; an element with a pointer cursor passes right away. The report shows how many elements were probed and which have no response (unclear whether they are clickable or focused — important for keyboard accessibility). No parameters — the current page is checked.
API request
Runs an HTTP request right inside the scenario — e.g. to log in via API, hit the backend, or prepare data. The request goes through the test browser, so cookies and the session are shared: an API login is visible to the page and vice versa. It spends no AI tokens/money.