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. Click Click an element. Pass visible button/link text or a CSS selector. I don't see Assert that text is NOT on the page. Wait Wait for text Wait for text to appear on the page. Format: text|seconds. Go to page Auto-generate steps (AI) Describe what to do next and press "Generate" - the system opens the page at this point of the scenario, AI turns the description into a plan and walks it in a live browser. The step is replaced with ready test steps. 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. Emulate mobile device The rest of the run behaves like a phone: mobile User-Agent and Client Hints, mobile layout (meta viewport), touch and the device screen size. The open page is reloaded. Needed for sites that pick the mobile version on the server - a narrow window alone is not enough for them. 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 send it to a webhook. Format: selector|attribute|endpoint. Grab page URL and send Grab the current page URL and send it to a webhook. Grab page title and send Grab the <title> and send it to a webhook. 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 send it to a webhook (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 send it to a webhook. Format: selector|endpoint. 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 send it to a webhook. Execute JS and send result Run a JS snippet and send its result to a webhook. Format: js|endpoint. 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/tab Switch to another browser tab. Accepts three kinds of value: 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. Extract data Collects structured data from the page: a list of similar cards (products, vacancies, listings) or a single object. The result appears on the “Data” tab of the run report, exports to CSV/JSON and is available over the API. Compare with previous run Compares the data of the current run with the previous run of this same step and fails the test if it changed: monitoring a price, stock level, catalogue contents or the version in the footer. End run End the run at this step. No parameters. The run counts as passed - the step belongs at the end of a branch the scenario reaches normally. The remaining steps do not appear in the report: they were deliberately not reached. Grab page metadata and send Grab the page meta tags and send them to a webhook. Format: field list|webhook. Clear cookies Delete all cookies in the current browser session. No parameters. The whole context is cleared, including other tabs - this signs you out of everything at once. localStorage is not touched: there is a separate step for it. Open a new tab Open a new tab and navigate to the URL. The tab becomes active immediately - the following steps run on it. Private and internal addresses are blocked. Grab page links and send Collect link addresses from the page and send them to a webhook. Format: link selector|«Next» selector|maximum|webhook. Jump to step Unconditionally continue the run from another step. Format: step|maximum triggers. Close browser tab Close a tab in the current run. Number: 1 is the leftmost tab, 2 the second from the left and so on. Empty or 0 closes the currently active tab; the run then switches to the last remaining one. The only tab cannot be closed - the step fails. Conditional jump If the element text contains the given string, continue the run from another step. Format: selector|text|step|maximum triggers. Random wait Pause for a random amount of time. Format: min|max in milliseconds. Mouse click & drag Drag by viewport coordinates. Format: x1|y1|x2|y2. Click social button Click «like», «follow» and similar - but only if it has not been clicked yet. Format: selector|word1, word2. Ask AI Ask the model a question about the page content. Format: selector|instruction|slot|webhook. Create test e-mail Creates a disposable address like t…@webboy.pro and puts it into a slot. Use it in any step via rmb:slot_1 - e.g. «Fill field» #email|rmb:slot_1. The mailbox lives for a day and accepts mail for this test only. Wait for e-mail Waits for an e-mail to the test address and checks it contains the text (searched in subject and body). Format: address|text|seconds. Open link from e-mail Opens a link from the latest e-mail to the test address in the current tab. Format: address|link text - matched by link text or URL; empty - the first link in the e-mail. Remember from e-mail Extracts a value from the latest e-mail with a regex and puts it into a slot - for one-time codes. Format: address|regex|slot; if the regex has a group, the first group is taken.