Skip to content

Recording Mode ​

Create workflows by clicking through tasks — no coding required.

How It Works ​

  1. Start recording — Click "New Recording" in the dashboard
  2. Perform actions — Navigate, click, type in your browser
  3. Stop recording — Actions are captured as workflow steps
  4. Export as YAML — Save to your actions folder

Starting a Recording ​

From Dashboard ​

  1. Open localhost:9876
  2. Click "Recordings" in the sidebar
  3. Click "New Recording"
  4. The extension will indicate recording is active

Recording Status ​

When recording:

  • Extension icon shows recording indicator
  • Dashboard shows "Recording..." status
  • All browser actions are captured

Captured Events ​

EventWhat's Recorded
NavigateURL visited
ClickElement clicked (multiple selector candidates)
TypeInput field and text entered
ScrollDirection and position
Key PressKeyboard key pressed

Selector Candidates ​

For each click/type action, multiple selector strategies are captured:

yaml
selectors:
  - "role=button[name='Submit']"     # ARIA role
  - "text=Submit"                     # Text content
  - "css=button.btn-primary"          # CSS selector
  - "[data-testid='submit-btn']"      # Test ID

This gives you options when editing — choose the most stable selector for your use case.

Stopping and Saving ​

Stop Recording ​

  1. Click "Stop Recording" in the dashboard
  2. Or click the extension icon and select "Stop"

Review Actions ​

After stopping, you'll see:

  • List of captured actions
  • Generated YAML preview
  • Option to edit before saving

Save as Workflow ​

  1. Give your recording a name
  2. Click "Save as Workflow"
  3. The file is saved to actions/ directory

Editing Recordings ​

Change Selectors ​

yaml
# Original (may be fragile)
- type: browser.click
  selector: "div.sc-1234abcd > button:nth-child(2)"

# Better (more stable)
- type: browser.click
  selector: "button[data-testid='submit']"

Add Wait Steps ​

yaml
steps:
  - type: browser.click
    selector: ".load-more"

  # Add wait for dynamic content
  - type: browser.wait
    selector: ".new-items"
    timeout: 5000

Add Parameters ​

yaml
# Make it reusable
params:
  search_term: string

steps:
  - type: browser.type
    selector: "#search"
    text: "{{search_term}}"  # Was hardcoded

Add LLM Steps ​

yaml
steps:
  # ... extraction steps from recording

  # Add AI processing
  - type: llm.generate
    prompt: "Summarize: {{extracted_content}}"
    as: summary

Best Practices ​

1. Keep Recordings Focused ​

Record one task at a time:

  • ✅ "Search for product"
  • ✅ "Add item to cart"
  • ❌ "Complete entire checkout flow"

2. Use Stable Selectors ​

Prefer selectors in this order:

  1. data-testid attributes
  2. ARIA labels
  3. Unique IDs
  4. Text content
  5. CSS classes (least stable)

3. Add Waits for Dynamic Content ​

If the page loads content dynamically, add explicit waits:

yaml
- type: browser.wait
  selector: ".dynamic-content"
  timeout: 10000

4. Test After Recording ​

Always run the workflow to verify it works:

  1. Save the recording
  2. Navigate to a similar page
  3. Run from dashboard
  4. Check run log for errors

5. Parameterize Hardcoded Values ​

Replace specific values with parameters:

yaml
# Before
- type: browser.navigate
  url: "https://example.com/product/12345"

# After
params:
  product_id: string
steps:
  - type: browser.navigate
    url: "https://example.com/product/{{product_id}}"

Limitations ​

What Can't Be Recorded ​

  • Hover actions (may not trigger reliably)
  • Drag and drop
  • Complex gestures
  • Actions in iframes (sometimes)

Workarounds ​

For unsupported actions, manually add steps:

yaml
# Add hover step manually
- type: browser.hover
  selector: ".dropdown-trigger"

- type: browser.wait
  ms: 500

- type: browser.click
  selector: ".dropdown-menu .option"

Troubleshooting ​

Recording doesn't start ​

  1. Is the extension connected?
  2. Is the server running?
  3. Refresh the page and try again

Actions not captured ​

Some pages block content scripts. Try:

  1. Refresh the page
  2. Reconnect the extension
  3. Check if site has strict CSP

Playback fails ​

Common issues:

  • Selector changed (use more stable selector)
  • Page structure different (add conditional logic)
  • Timing issue (add wait steps)

Next Steps ​

Released under the Apache-2.0 License.