Skip to main content

Overview

Each node in AutoMFlows has configurable properties that control its behavior. This guide covers common configuration options and advanced features like retry strategies, wait conditions, and error handling.

Common Node Properties

All nodes share these basic properties:

ID

Unique identifier for the node, automatically generated when the node is created.

Type

Defines the node’s behavior (e.g., openBrowser, action, verify).

Label

Human-readable name displayed on the canvas.

Position

X and Y coordinates on the canvas.

Browser Node Configuration

Open Browser Node

The Open Browser node launches a browser instance with Playwright.
{
  "type": "openBrowser",
  "data": {
    "label": "Open Browser",
    "headless": false,
    "browser": "chromium",  // chromium, firefox, webkit
    "viewportWidth": 1280,
    "viewportHeight": 720,
    "maxWindow": true,
    "stealthMode": false,
    "launchOptions": {},
    "capabilities": {},
    "jsScript": "" // JavaScript to inject before page loads
  }
}
  • chromium: Google Chrome/Edge (default)
  • firefox: Mozilla Firefox
  • webkit: Safari (WebKit engine)
Navigate to URLs or control browser history.
{
  "type": "navigation",
  "data": {
    "label": "Navigate to Site",
    "action": "navigate",  // navigate, goBack, goForward, reload
    "url": "https://example.com",
    "waitUntil": "networkidle",  // load, domcontentloaded, networkidle
    "timeout": 30000,
    "referer": ""  // Optional referer header
  }
}
The navigation node automatically normalizes URLs by adding https:// if no protocol is specified.

Action Node

Perform browser interactions like clicks, hovers, and drag-and-drop.
{
  "type": "action",
  "data": {
    "label": "Click Button",
    "action": "click",  // click, doubleClick, rightClick, hover, dragAndDrop
    "selector": "button.submit",
    "selectorType": "css",  // css, xpath, text
    "selectorModifiers": [],
    "timeout": 30000,
    "button": "left",  // left, right, middle
    "delay": 0  // Delay in ms after action
  }
}
CSS Selectors (default):
button.submit
#login-form input[type="email"]
div.container > p:first-child
XPath:
//button[@class="submit"]
//input[@type="email"]
Text:
text=Submit
text=/Sign (in|up)/i

API Node Configuration

API Request Node

Make HTTP requests with full control over headers, body, and authentication.
{
  "type": "apiRequest",
  "data": {
    "label": "Get User Data",
    "method": "POST",
    "url": "https://api.example.com/users",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer ${token}"
    },
    "body": '{"name": "John Doe", "email": "[email protected]"}',
    "bodyType": "json",  // json, form-data, x-www-form-urlencoded, raw
    "timeout": 30000,
    "contextKey": "apiResponse"  // Store response in context
  }
}
  • GET
  • POST
  • PUT
  • PATCH
  • DELETE
  • HEAD
  • OPTIONS

API cURL Node

Import and execute cURL commands directly.
{
  "type": "apiCurl",
  "data": {
    "label": "Execute cURL",
    "curlCommand": "curl -X POST https://api.example.com/users -H 'Content-Type: application/json' -d '{\"name\": \"John\"}'",
    "timeout": 30000,
    "contextKey": "apiResponse"
  }
}
The cURL parser automatically extracts method, URL, headers, and body from the command string.

Verification Node

Verify browser state or API responses.
{
  "type": "verify",
  "data": {
    "label": "Verify Login Success",
    "domain": "browser",  // browser, api
    "verificationType": "text",  // text, url, statusCode, jsonPath, attribute
    "selector": "h1.welcome",
    "expectedValue": "Welcome back!",
    "selectorType": "css"
  }
}
Text Content:
{
  "verificationType": "text",
  "selector": "h1",
  "expectedValue": "Create Account"
}
URL:
{
  "verificationType": "url",
  "expectedValue": "https://example.com/dashboard"
}
Attribute:
{
  "verificationType": "attribute",
  "selector": "input[name='email']",
  "attribute": "value",
  "expectedValue": "[email protected]"
}

Retry Strategies

Configure retry behavior for nodes that may fail transiently.
{
  "retryEnabled": true,
  "retryStrategy": "count",  // count, untilCondition
  "retryCount": 3,
  "retryDelay": 1000,  // ms
  "retryDelayStrategy": "exponential",  // fixed, exponential
  "retryMaxDelay": 10000,  // ms
  "failSilently": false
}
Retry a fixed number of times:
{
  "retryEnabled": true,
  "retryStrategy": "count",
  "retryCount": 3,
  "retryDelay": 1000
}
Use retry strategies carefully with state-changing operations (POST, PUT, DELETE) to avoid duplicate actions.

Wait Conditions

Define wait conditions before or after node execution.
{
  "waitAfterOperation": false,
  "waitForSelector": "div.loaded",
  "waitForSelectorType": "css",
  "waitForSelectorTimeout": 5000,
  "waitForUrl": "https://example.com/dashboard",
  "waitForUrlTimeout": 5000,
  "waitForCondition": "document.readyState === 'complete'",
  "waitForConditionTimeout": 5000,
  "waitStrategy": "all"  // all, any, race
}
Wait for an element to appear:
{
  "waitForSelector": ".success-message",
  "waitForSelectorType": "css",
  "waitForSelectorTimeout": 5000
}

Context Manipulation

The Context Manipulate node configures browser context properties.
{
  "type": "contextManipulate",
  "data": {
    "action": "setGeolocation",
    "geolocation": {
      "latitude": 37.7749,
      "longitude": -122.4194,
      "accuracy": 100
    }
  }
}
{
  "action": "setGeolocation",
  "geolocation": {
    "latitude": 37.7749,
    "longitude": -122.4194
  }
}

Variable Interpolation

Use variables from context in node properties:
{
  "url": "https://api.example.com/users/${userId}",
  "headers": {
    "Authorization": "Bearer ${authToken}"
  },
  "body": '{"email": "${userData.email}"}'
}
Variables are interpolated at execution time using the ${variableName} syntax. Nested properties use dot notation: ${object.property}.

Error Handling

Configure how nodes handle errors:
{
  "failSilently": false,  // Continue execution on error
  "timeout": 30000  // Throw error after timeout
}
When failSilently: true, the node logs a warning but continues workflow execution. Use this carefully to avoid masking critical failures.

Config File Nodes

Load configuration from JSON files:
{
  "type": "loadConfigFile",
  "data": {
    "configs": [
      {
        "fileName": "test-data.json",
        "fileContent": '{"apiUrl": "https://api.example.com", "timeout": 5000}',
        "enabled": true,
        "contextKey": "config"  // Optional: store under specific key
      }
    ]
  }
}
The config is merged into the execution context and can be accessed by other nodes:
const apiUrl = context.getData('config').apiUrl;

Next Steps

Browser Automation

Learn advanced browser automation techniques with Playwright.

API Testing

Test REST APIs with advanced request configuration.

Build docs developers (and LLMs) love