live_run_step
Executes a single automation step live against the target tab and returns its result, letting you test one action or read page state without building a full flow.
Instructions
Runs one plain step (locator/page/assert/variable -- not a Conditional/Repeat/Iterate) live against the side panel's target tab (the pinned tab, or the active tab if none is pinned), the same way a step's own Play button would, and returns its result: capturedValue for a variable step, and generically returnValue -- whatever the underlying Playwright call itself returned (e.g. {kind:"locator", method:"count", selector:"li.item"} or {kind:"page", method:"title"}), not just the fixed capture trio. Useful for trying one action, or reading one piece of page state, without building a whole flow first. Requires the side panel open and connected.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| step | Yes | A step object: { kind, method, selector?, pageObjectName?, pageObjectMethod?, pageObjectArgs?, elementAlias?, scopeName?, scopeSelector?, args?, options?, negate?, variable?, raw?, condition?, init?, update?, steps?, iterableName?, itemVarName? } -- same shape as a flow.json step; see get_flow on an existing flow for real examples of each kind. `selector`/`scopeSelector` are Playwright locator-chain EXPRESSIONS (see get_page_object's own description), not bare selector-engine strings -- e.g. "getByRole('button', { name: 'Submit' })", spliced as page.<selector> (or <scope>.<selector> when scoped) in generated code. scopeName/scopeSelector only apply to a step NOT bound to a page-object method (a page-object-bound step's scope comes from that method's own scope assignment instead -- see set_method_scope): scopeSelector defines a new flow-local scope (reused by any later step in this SAME flow that sets just scopeName to the same value); a step with only scopeName reuses whichever earlier step in this flow first defined that name. `kind: "raw"` is ONLY for genuinely inline, unnamed code (the `raw` field, its own JS/TS statement(s)). Calling a shared, project-wide Util function instead (see create_util/set_util_body/set_util_params/set_util_group_name) is NOT a `raw` step at all -- the step's own `kind` IS the util's current group name (every util always belongs to a group, defaulting to "custom-utils"; see list_util_groups), and `method` names which function within it, exactly like kind:"context"+method:"clearCookies" -- e.g. { kind: "custom-utils", method: "connectDb", args?, variable? }. Look up a util's current groupName via get_util/list_utils before authoring a step that calls it. | |
| project | No | Path to the project root (same folder the side panel connects to). Defaults to the EASYSPEC_PROJECT environment variable if omitted. | |
| session | No | Which connected side panel to target, by its connection id (see live_status) -- only needed when more than one side panel is connected to the same project. |