Common Browser Automation Patterns
January 30, 2026 ยท View on GitHub
This document provides proven workflows for common browser automation tasks using agent-browser.
Pattern Index
- UX Component Testing
- Multi-Page Form Flows
- Authentication & Session Management
- Web Scraping & Content Extraction
- Visual Regression Testing
- Dynamic Content Handling
- File Upload & Download
- Multiple Account Management
- Error Recovery
- Performance Testing
UX Component Testing
Goal: Validate UI components work correctly across interactions.
Basic Component Test
# Open component page
agent-browser open https://myapp.com/components/modal
# Get initial snapshot
agent-browser snapshot -i --json
# Parse to find trigger button (@e1)
# Trigger modal
agent-browser click @e1
# Wait for modal to appear
agent-browser wait --text "Modal Title"
# Get new snapshot (modal elements)
agent-browser snapshot -i --json
# Parse to find close button (@e5), submit (@e6)
# Verify modal contents
agent-browser get text @e5 --json # Check text
# Take screenshot for visual verification
agent-browser screenshot modal-open.png
# Close modal
agent-browser click @e5
# Verify modal closed
agent-browser wait 1000
agent-browser is visible @e5 --json
# Should return: {"success": true, "data": {"visible": false}}
Responsive Component Testing
# Test desktop view
agent-browser set viewport 1920 1080
agent-browser open https://myapp.com/component
agent-browser screenshot desktop.png
# Test tablet view
agent-browser set viewport 768 1024
agent-browser reload
agent-browser screenshot tablet.png
# Test mobile view
agent-browser set viewport 375 667
agent-browser reload
agent-browser screenshot mobile.png
# Or use device emulation
agent-browser set device "iPhone 14"
agent-browser reload
agent-browser screenshot iphone14.png
Interaction Testing
# Test hover states
agent-browser open https://myapp.com/buttons
agent-browser snapshot -i --json
agent-browser hover @e1
agent-browser screenshot button-hover.png
# Test focus states
agent-browser focus @e2
agent-browser screenshot button-focus.png
# Test click states
agent-browser click @e3
agent-browser screenshot button-active.png
Multi-Page Form Flows
Goal: Complete forms that span multiple pages with validation.
Wizard Flow with Validation
# Step 1: Personal Info
agent-browser open https://app.example.com/signup/step1
agent-browser snapshot -i --json
agent-browser fill @e1 "John Doe"
agent-browser fill @e2 "john@example.com"
agent-browser click @e3 # Next button
# Wait for validation or next page
agent-browser wait --url "**/step2"
# Step 2: Address Info
agent-browser snapshot -i --json
agent-browser fill @e1 "123 Main St"
agent-browser fill @e2 "New York"
agent-browser select @e3 "NY"
agent-browser fill @e4 "10001"
agent-browser click @e5 # Next button
agent-browser wait --url "**/step3"
# Step 3: Payment Info
agent-browser snapshot -i --json
agent-browser fill @e1 "4111111111111111"
agent-browser fill @e2 "12/25"
agent-browser fill @e3 "123"
agent-browser click @e4 # Submit button
# Wait for confirmation
agent-browser wait --text "Thank you"
agent-browser screenshot confirmation.png
Handling Validation Errors
# Fill form with invalid data
agent-browser fill @e2 "invalid-email"
agent-browser click @e3 # Submit
# Wait for error message
agent-browser wait --text "Invalid email"
# Get error text
agent-browser snapshot -i --json
agent-browser get text @e4 --json
# Parse error message
# Correct the error
agent-browser fill @e2 "valid@example.com"
agent-browser click @e3
# Verify success
agent-browser wait --url "**/success"
Authentication & Session Management
Login with Persistent Profile
# Create persistent profile for authenticated sessions
agent-browser --profile ~/.myapp-profile open https://app.example.com/login
agent-browser snapshot -i --json
agent-browser fill @e1 "user@example.com"
agent-browser fill @e2 "password123"
agent-browser click @e3
# Wait for dashboard
agent-browser wait --url "**/dashboard"
# Close browser (profile persists)
agent-browser close
# Later: Reuse authenticated session
agent-browser --profile ~/.myapp-profile open https://app.example.com/dashboard
# Already logged in!
Multi-Account Testing
# Session 1: Admin account
agent-browser --session admin --profile ~/.profiles/admin open app.com/login
agent-browser snapshot -i --json
agent-browser fill @e1 "admin@example.com"
agent-browser fill @e2 "admin-pass"
agent-browser click @e3
# Session 2: Regular user
agent-browser --session user --profile ~/.profiles/user open app.com/login
agent-browser snapshot -i --json
agent-browser fill @e1 "user@example.com"
agent-browser fill @e2 "user-pass"
agent-browser click @e3
# Test admin functionality
agent-browser --session admin open app.com/admin
agent-browser snapshot -i --json
# Verify admin panel visible
# Test user restrictions
agent-browser --session user open app.com/admin
agent-browser wait --text "Access Denied"
# Verify user cannot access admin
OAuth/SSO Flow
# Start OAuth flow
agent-browser open https://app.example.com/login
agent-browser snapshot -i --json
agent-browser click @e2 # "Sign in with Google" button
# Wait for OAuth provider
agent-browser wait --url "**accounts.google.com**"
# Fill OAuth credentials
agent-browser snapshot -i --json
agent-browser fill @e1 "user@gmail.com"
agent-browser click @e2 # Next
agent-browser wait 2000
agent-browser snapshot -i --json
agent-browser fill @e1 "password"
agent-browser click @e2 # Sign in
# Wait for redirect back
agent-browser wait --url "**app.example.com**"
agent-browser wait --url "**/dashboard"
Web Scraping & Content Extraction
Single Page Scraping
# Navigate to content
agent-browser open https://docs.example.com/api/reference
# Get structured snapshot
agent-browser snapshot -i -s "article" --json
# Parse to identify content elements
# Extract title
agent-browser get text @e1 --json
# Extract description
agent-browser get text @e2 --json
# Extract code examples
agent-browser get html @e3 --json
# Take screenshot for reference
agent-browser screenshot api-reference.png
Multi-Page Scraping
# Start at index
agent-browser open https://docs.example.com/guides
agent-browser snapshot -i --json
# Parse to find all guide links (@e1, @e2, @e3...)
# Scrape first guide
agent-browser click @e1
agent-browser wait --load domcontentloaded
agent-browser snapshot -i -s "article" --json
agent-browser get text @e5 --json # Title
agent-browser get html @e6 --json # Content
# Go back and scrape next
agent-browser back
agent-browser wait 1000
agent-browser click @e2
# Repeat extraction...
Table Data Extraction
agent-browser open https://app.example.com/reports/data
# Get table snapshot
agent-browser snapshot -i -s "table" --json
# Extract table headers
agent-browser get text @e1 --json # Header 1
agent-browser get text @e2 --json # Header 2
# Extract row data
agent-browser get text @e5 --json # Row 1, Col 1
agent-browser get text @e6 --json # Row 1, Col 2
# Or get entire table HTML and parse
agent-browser get html @e0 --json
Visual Regression Testing
Baseline Capture
# Capture baseline screenshots
agent-browser open https://myapp.com/home
agent-browser screenshot baselines/home.png --full
agent-browser open https://myapp.com/dashboard
agent-browser screenshot baselines/dashboard.png --full
agent-browser open https://myapp.com/settings
agent-browser screenshot baselines/settings.png --full
Regression Testing
# After deployment, capture new screenshots
agent-browser open https://myapp.com/home
agent-browser screenshot current/home.png --full
agent-browser open https://myapp.com/dashboard
agent-browser screenshot current/dashboard.png --full
# AI agent can now compare:
# - baselines/home.png vs current/home.png
# - baselines/dashboard.png vs current/dashboard.png
# Report any visual differences
Component-Specific Regression
# Test specific component states
agent-browser open https://myapp.com/components/button
# Normal state
agent-browser screenshot states/button-normal.png
# Hover state
agent-browser hover @e1
agent-browser screenshot states/button-hover.png
# Disabled state
agent-browser eval "document.querySelector('button').disabled = true"
agent-browser screenshot states/button-disabled.png
# Compare with baselines
Dynamic Content Handling
Waiting for Dynamic Content
# Open page with lazy-loaded content
agent-browser open https://app.example.com/dashboard
# Wait for specific element to appear
agent-browser wait --text "Welcome back"
# Or wait for element by selector
agent-browser wait ".dashboard-loaded"
# Or wait for network idle
agent-browser wait --load networkidle
# Then take snapshot
agent-browser snapshot -i --json
Infinite Scroll
# Open page with infinite scroll
agent-browser open https://app.example.com/feed
# Initial snapshot
agent-browser snapshot -i --json
# Extract items...
# Scroll down to trigger load
agent-browser scroll down 1000
agent-browser wait 2000 # Wait for load
# Get new snapshot (includes new items)
agent-browser snapshot -i --json
# Continue scrolling
agent-browser scroll down 1000
agent-browser wait 2000
agent-browser snapshot -i --json
AJAX Form Submission
# Fill form
agent-browser snapshot -i --json
agent-browser fill @e1 "data"
agent-browser click @e2 # Submit (AJAX)
# Don't wait for URL change (AJAX doesn't navigate)
# Instead wait for success indicator
agent-browser wait --text "Success"
# Or wait for element to appear
agent-browser wait ".success-message"
# Verify result
agent-browser snapshot -i --json
agent-browser get text @e5 --json
File Upload & Download
File Upload
agent-browser open https://app.example.com/upload
agent-browser snapshot -i --json
# Upload single file
agent-browser upload @e1 "/path/to/document.pdf"
# Upload multiple files
agent-browser upload @e1 "/path/to/file1.pdf,/path/to/file2.jpg"
# Submit upload form
agent-browser click @e2
# Wait for upload complete
agent-browser wait --text "Upload successful"
File Download Verification
# Trigger download
agent-browser open https://app.example.com/reports
agent-browser snapshot -i --json
agent-browser click @e3 # "Download Report" button
# Wait for download to start
agent-browser wait 2000
# Note: Files download to system default directory
# Agent can verify file exists using bash tool
Multiple Account Management
Parallel Session Testing
# User 1: Create content
agent-browser --session user1 open app.com
agent-browser --session user1 snapshot -i --json
agent-browser --session user1 fill @e1 "New Post"
agent-browser --session user1 click @e2
# User 2: View content
agent-browser --session user2 open app.com
agent-browser --session user2 snapshot -i --json
agent-browser --session user2 wait --text "New Post"
# Verify User 2 sees User 1's content
agent-browser --session user2 get text @e5 --json
Role-Based Access Testing
# Admin: Access all features
agent-browser --session admin --profile ~/.profiles/admin open app.com
agent-browser --session admin open app.com/admin
agent-browser --session admin snapshot -i --json
# Verify admin panel visible
# Editor: Limited access
agent-browser --session editor --profile ~/.profiles/editor open app.com
agent-browser --session editor open app.com/admin
agent-browser --session editor wait --text "Forbidden"
# Viewer: Read-only
agent-browser --session viewer --profile ~/.profiles/viewer open app.com
agent-browser --session viewer snapshot -i --json
# Verify no edit buttons present
Error Recovery
Retry on Element Not Found
# Attempt interaction
agent-browser click @e5 --json
# Check success field
# If {"success": false, "error": "Element not found"}:
# Re-snapshot to get fresh refs
agent-browser snapshot -i --json
# Retry with new ref
agent-browser click @e5 --json
Handling Timeouts
# Attempt with timeout
agent-browser wait @e3 --timeout 5000 --json
# If timeout:
# {"success": false, "error": "Timeout waiting for element"}
# Try different strategy
agent-browser wait --text "Loading" --timeout 10000
agent-browser wait --load networkidle
agent-browser snapshot -i --json
Handling Popup Dialogs
# Trigger action that shows confirm dialog
agent-browser click @e2
# Accept dialog
agent-browser dialog accept
# Or dismiss
agent-browser dialog dismiss
# Or provide input (for prompt dialogs)
agent-browser dialog accept "input text"
Performance Testing
Page Load Timing
# Navigate and measure
agent-browser open https://app.example.com
# Get performance metrics via eval
agent-browser eval "JSON.stringify(performance.timing)" --json
# Or specific metrics
agent-browser eval "performance.timing.loadEventEnd - performance.timing.navigationStart" --json
Network Monitoring
# Track network requests
agent-browser open https://app.example.com
agent-browser network requests --json
# Filter specific requests
agent-browser network requests --filter "api" --json
# Check for slow requests, failed requests, etc.
Resource Analysis
# Check page resources
agent-browser eval "document.images.length" --json
agent-browser eval "document.scripts.length" --json
agent-browser eval "document.styleSheets.length" --json
# Take full page screenshot to verify rendering
agent-browser screenshot page.png --full
Best Practices Summary
Token Efficiency
- Always use
-iflag for snapshots (interactive elements only) - Combine filters:
snapshot -i -c -d 5for maximum reduction - Scope selectors:
snapshot -i -s "#main"when possible - Re-snapshot sparingly: Only after page changes
Reliability
- Use refs over CSS selectors: Deterministic and AI-friendly
- Wait appropriately: Use
wait --textorwait --urlinstead of arbitrary timeouts - Verify state: Check
successfield in JSON responses - Handle errors gracefully: Re-snapshot and retry on element not found
Performance
- Reuse sessions: Daemon persists between commands
- Use profiles: Avoid repeated logins
- Batch operations: Script multiple commands together
- Minimize headed mode: Only for debugging
Debugging
- Start with --headed: See what's happening visually
- Check console:
agent-browser console --jsonfor JS errors - Use screenshots: Capture state at each step
- Enable trace:
agent-browser trace startfor deep debugging
Next Steps
- Review Browser Automation Guide for command reference
- Check Troubleshooting for common issues
- Explore agent-browser GitHub for updates