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.