Click, Type & Form Actions
Actions for clicking, typing, checking boxes, and picking options.
click
Click an element.
Value: string (selector)
<button id="submit-btn">Submit</button>
[
{ "click": "#submit-btn" }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
delay | number | 0 | Wait this many ms before clicking |
showClick | boolean | true | Show a red ring where it clicks |
waitFor | boolean | true | Wait for the element to appear first |
timeout | number | 10000 | How long to wait (ms) |
iframe | string | string[] | — | Find the element inside an iframe |
With delay and custom timeout:
[
{
"click": "button.submit",
"options": { "delay": 500, "timeout": 5000 }
}
]
Using XPath:
[
{ "click": "//button[contains(text(), 'Sign In')]" }
]
Inside an iframe:
[
{
"click": ".inner-button",
"options": { "iframe": "#content-frame" }
}
]
Nested iframes:
[
{
"click": ".deep-button",
"options": { "iframe": ["#outer-frame", "#inner-frame"] }
}
]
clickHuman
Click an element using a realistic curved mouse path using the Chrome DevTools Protocol (CDP). Use this on sites that detect and block regular automated clicks.
Value: string (CSS selector)
<button id="login-btn">Log in</button>
[
{ "clickHuman": "#login-btn" }
]
Fast mode — starts the mouse path closer to the target:
[
{ "clickHuman": ".submit-button", "options": { "mode": "fast" } }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
mode | string | — | Set to "fast" to start the mouse path closer to the target |
offsetX | number | 0 | Horizontal offset from element center |
offsetY | number | 0 | Vertical offset from element center |
A visible cursor animation plays on screen during the movement.
hover
Move the mouse over an element without clicking. Useful for opening dropdown menus or tooltips.
Value: string (selector)
<div class="dropdown">
<span class="trigger">Menu</span>
<ul class="items">...</ul>
</div>
[
{ "hover": ".trigger" }
]
Options
Same as click: delay, showClick, waitFor, timeout, iframe.
hoverHuman
Hover over an element with a realistic mouse path without clicking using the Chrome DevTools Protocol (CDP). Useful for triggering tooltips or dropdown menus on sites that detect automated behavior.
Value: string (CSS selector)
<a class="nav-item">Products</a>
[
{ "hoverHuman": ".nav-item" }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
offsetX | number | 0 | Horizontal offset from element center |
offsetY | number | 0 | Vertical offset from element center |
fill
Type text into an input, textarea, or contenteditable element. Clears the field first by default.
Value: [selector, text]
<input type="email" name="email" />
[
{ "fill": ["input[name=email]", "user@example.com"] }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
clear | boolean | true | Clear the field before typing |
delay | number | 0 | Wait between each keystroke (ms) |
waitFor | boolean | true | Wait for the element to appear |
timeout | number | 10000 | How long to wait |
showClick | boolean | true | Show visual feedback |
iframe | string | string[] | — | Find the element inside an iframe |
Append to existing text:
[
{
"fill": ["textarea#message", " (edited)"],
"options": { "clear": false }
}
]
Slow typing (simulates human speed):
[
{
"fill": ["input#search", "Hello"],
"options": { "delay": 50 }
}
]
If a site's editor rejects this synthetic insertion, use fillHuman instead, which types through the Chrome DevTools Protocol.
fillHuman
Type text using the Chrome DevTools Protocol (CDP) — fully trusted input. This is the most robust option for framework rich-text editors (Draft.js, Slate, Lexical, ProseMirror) and works on standard inputs too.
Optionally clears existing content, then inserts the text.
Value: [selector, text]
[
{ "fillHuman": ["[data-testid='tweetTextarea_0']", "Typed via CDP"] }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
clear | boolean | true | Clear existing content (Ctrl+A, Delete) before typing |
delay | number | 0 | When set (> 0), types character-by-character at this interval (ms). Otherwise inserts in one trusted operation |
offsetX | number | 0 | X offset from the element center for the focusing click |
offsetY | number | 0 | Y offset from the element center for the focusing click |
Character-by-character typing (triggers per-key handlers like @mentions):
[
{
"fillHuman": ["#comment", "Hey @friend!"],
"options": { "delay": 60 }
}
]
fillHuman briefly attaches the Chrome debugger to the tab (the same mechanism as clickHuman), so Chrome shows a "started debugging this browser" banner while it runs.
press
Press a key on an element. Use null as the selector to send the key to the whole page.
Value: [selector, key]
<input type="text" id="search" />
[
{ "press": ["#search", "Enter"] }
]
Send a key to the whole page:
[
{ "press": [null, "Escape"] }
]
Modifier keys — use + to combine:
[
{ "press": [null, "Control+a"] },
{ "press": [null, "Control+c"] },
{ "press": ["input", "Shift+Tab"] }
]
Options
Same as click: delay, waitFor, timeout, showClick, iframe.
check
Check a checkbox or radio button. Does nothing if it is already checked.
Value: string (selector)
<input type="checkbox" id="agree-terms" />
<label for="agree-terms">I agree to the terms</label>
[
{ "check": "#agree-terms" }
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
checked | boolean | true | true to check, false to uncheck |
uncheck
Uncheck a checkbox. Shorthand for check with checked: false.
Value: string (selector)
<input type="checkbox" id="subscribe" checked />
[
{ "uncheck": "#subscribe" }
]
selectOption
Pick an option from a <select> dropdown. Matches by value attribute by default.
Value: [selector, value]
<select id="country">
<option value="US">United States</option>
<option value="UK">United Kingdom</option>
<option value="JP">Japan</option>
</select>
[
{ "selectOption": ["#country", "US"] }
]
By visible text:
[
{
"selectOption": ["#country", "United States"],
"options": { "by": "text" }
}
]
By index (0-based):
[
{
"selectOption": ["#country", 0],
"options": { "by": "index" }
}
]
Multi-select (pass an array of values):
[
{
"selectOption": ["select#tags", ["javascript", "python", "go"]],
"options": { "by": "text" }
}
]
Options
| Option | Type | Default | Description |
|---|---|---|---|
by | string | "value" | How to match: "value", "text", or "index" |