# Chrome DevTools MCP Workflows This document details the key workflows supported by the chrome-devtools-mcp server, including step-by-step processes, tool combinations, and best practices. *Documentation format inspired by Mike Dion's Markdown specification (.md)* --- ## 1. Performance Analysis Workflow Measure and analyze page performance including Core Web Vitals (INP, LCP, CLS) and lab metrics (TBT). ### Tools Required - `performance_start_trace` - Start Chrome DevTools performance tracing - `performance_stop_trace` - Stop tracing and retrieve trace data - `performance_analyze_insight` - Extract detailed performance insights ### Step-by-Step Process #### Basic Performance Capture ``` 1. Start performance trace - Tool: performance_start_trace - Parameters: - reload: true (to capture full page load) - autoStop: false (for manual control) 2. Wait for page to complete loading - Tool: wait_for - Wait for specific content or use timeout 3. Stop trace recording - Tool: performance_stop_trace - Returns: Trace data with Core Web Vitals 4. Analyze specific insights - Tool: performance_analyze_insight - Parameters: insightName (e.g., "LCPBreakdown", "DocumentLatency") ``` #### Advanced Performance Analysis ``` 1. Navigate to target page - Tool: navigate_page - Ensure clean state before tracing 2. Start trace without reload - Tool: performance_start_trace - Parameters: reload: false, autoStop: true - Use when testing specific interactions 3. Perform user interactions - Tools: click, fill, scroll actions - Captures interaction-based metrics 4. Auto-stop or manual stop - Tool: performance_stop_trace (if manual) - Trace ends automatically if autoStop: true 5. Review multiple insights - Tool: performance_analyze_insight - Check: "LCPBreakdown", "DocumentLatency", "TBT" ``` ### Core Web Vitals Interpretation #### Interaction to Next Paint (INP) - **Good:** ≤ 200ms - **Needs Improvement:** 200-500ms - **Poor:** > 500ms - **Measures:** Input delay + processing time + presentation delay - **Note:** Field metric only; requires real user interactions #### Largest Contentful Paint (LCP) - **Good:** ≤ 2.5 seconds - **Needs Improvement:** 2.5-4 seconds - **Poor:** > 4 seconds - **Measures:** Render time of largest content element in viewport #### Cumulative Layout Shift (CLS) - **Good:** ≤ 0.1 - **Needs Improvement:** 0.1-0.25 - **Poor:** > 0.25 - **Measures:** Unexpected layout shifts during page lifecycle #### Total Blocking Time (TBT) - **Good:** < 200ms - **Status:** Lab proxy for INP, NOT a Core Web Vital - **Measures:** Time main thread blocked (>50ms) after First Contentful Paint ### Trace Configuration Options **CDP Domains Used:** Tracing, Performance **Trace Categories:** - `devtools.timeline` - Standard performance timeline - `disabled-by-default-devtools.screenshot` - Screenshots during trace - Custom categories for specific analysis **Export Formats:** - JSON format (for Chrome DevTools Performance panel) - Perfetto protocol buffer (for Perfetto UI) ### Performance Workflow Best Practices 1. **Always reload for baseline metrics** - Use `reload: true` for consistent page load measurements 2. **Clear cache between runs** - Use isolated mode or clear cache manually 3. **Multiple trace captures** - Run 3-5 times and use median values 4. **Analyze specific insights** - Use performance_analyze_insight for LCP breakdown and document latency 5. **Export traces** - Save trace data for offline analysis in Chrome DevTools --- ## 2. Network Monitoring Workflow Capture, filter, and analyze HTTP traffic with HAR export capabilities. ### Tools Required - `list_network_requests` - List all network requests since last navigation - `get_network_request` - Get specific request/response details ### Step-by-Step Process #### Basic Network Capture ``` 1. Navigate to target page - Tool: navigate_page - Clears previous network requests 2. List all requests - Tool: list_network_requests - Returns: Array of requests with reqid identifiers 3. Get specific request details - Tool: get_network_request - Parameter: reqid from list_network_requests - Returns: Full request/response with headers, body, timing ``` #### Filtered Network Analysis ``` 1. Navigate and wait - Tool: navigate_page - Tool: wait_for (specific content) 2. Filter by resource type - Tool: list_network_requests - Parameters: resourceTypes array - Options: ["document", "stylesheet", "image", "script", "xhr", "fetch"] 3. Paginated request listing - Tool: list_network_requests - Parameters: pageSize (limit), pageIdx (0-based) - Use for large request volumes 4. Include preserved requests - Tool: list_network_requests - Parameters: includePreservedRequests: true - Returns: Requests from last 3 navigations ``` ### HAR Export Capabilities The `list_network_requests` tool returns data compatible with HTTP Archive (HAR) format v1.2: **HAR Structure:** ```json { "log": { "version": "1.2", "creator": {...}, "pages": [...], "entries": [ { "request": { "method": "GET", "url": "https://example.com", "headers": [...], "queryString": [...] }, "response": { "status": 200, "headers": [...], "content": {...} }, "timings": { "dns": 10, "connect": 20, "ssl": 15, "send": 5, "wait": 100, "receive": 50 } } ] } } ``` ### Resource Type Filtering **Available Resource Types:** - `document` - HTML documents - `stylesheet` - CSS files - `image` - Images (PNG, JPEG, GIF, WebP, SVG) - `media` - Video/audio files - `font` - Web fonts - `script` - JavaScript files - `texttrack` - Video text tracks - `xhr` - XMLHttpRequest - `fetch` - Fetch API requests - `prefetch` - Prefetch resources - `eventsource` - Server-Sent Events - `websocket` - WebSocket connections - `manifest` - Web app manifests - `signedexchange` - Signed HTTP Exchanges - `ping` - Beacon/ping requests - `cspviolationreport` - CSP violation reports - `preflight` - CORS preflight requests - `other` - Uncategorized resources ### Network Timing Details Each request includes detailed timing breakdown: - **DNS lookup time** - Domain name resolution - **Connection time** - TCP connection establishment - **SSL time** - TLS/SSL handshake - **Send time** - Request transmission - **Wait time** - Server processing (TTFB) - **Receive time** - Response download ### Network Workflow Best Practices 1. **Filter early** - Use resourceTypes parameter to reduce data volume 2. **Paginate large captures** - Use pageSize/pageIdx for pages with hundreds of requests 3. **Preserve across navigations** - Set includePreservedRequests: true for multi-page flows 4. **Combine with emulation** - Use emulate_network to test different connection speeds 5. **Security details** - Check protocol, cipher suite in response data 6. **Cookie tracking** - Request data includes cookie information --- ## 3. Accessibility Testing Workflow Validate semantic structure and screen reader compatibility using the accessibility tree. ### Tool Required - `take_snapshot` - Get text representation based on accessibility tree ### Step-by-Step Process #### Basic Accessibility Snapshot ``` 1. Navigate to target page - Tool: navigate_page 2. Take standard snapshot - Tool: take_snapshot - Parameter: verbose: false (default) - Returns: Text representation with element UIDs 3. Analyze snapshot for: - ARIA roles and attributes - Semantic HTML usage - Accessible names and descriptions - Focusable elements - Form label associations ``` #### Verbose Accessibility Analysis ``` 1. Take verbose snapshot - Tool: take_snapshot - Parameter: verbose: true - Returns: Full accessibility tree with all properties 2. Review detailed properties: - nodeId, role, name, description, value - States (busy, disabled, focusable, focused, etc.) - Relationships (labelledby, describedby, controls) - ARIA attributes - Computed roles ``` ### Accessibility Tree Usage The accessibility tree is a parallel tree structure to the DOM that represents how assistive technologies (screen readers) interpret the page. **AXNode Properties:** - `nodeId` - Unique identifier for accessibility node - `ignored` - Whether node is ignored by assistive tech - `role` - ARIA role (button, link, heading, etc.) - `name` - Accessible name (visible label) - `description` - Accessible description (additional context) - `value` - Current value (for inputs, sliders) - `states` - Object with boolean flags: - `busy`, `disabled`, `editable`, `focusable`, `focused` - `hidden`, `hiddenRoot`, `invalid`, `modal`, `multiline` - `multiselectable`, `readonly`, `required`, `selected` - `relationships` - ARIA relationships: - `labelledby`, `describedby`, `controls`, `owns` - `activeDescendant`, `flowTo`, `details` ### Element UID Extraction The `take_snapshot` tool returns unique identifiers (UIDs) for each interactive element: **Example Snapshot Output:** ``` [1] button "Submit Form" [2] textbox "Email Address" [3] link "Privacy Policy" [4] heading "Welcome to Our Site" level=1 [5] checkbox "Remember me" checked ``` **Using UIDs for interaction:** ``` 1. Take snapshot to get UIDs - Tool: take_snapshot 2. Identify target element UID - Example: [2] for email textbox 3. Interact using UID - Tool: fill - Parameters: uid: "2", value: "user@example.com" ``` ### Accessibility Testing Patterns #### 1. Form Accessibility Check ``` 1. Take snapshot 2. Verify each input has accessible name 3. Check label associations 4. Validate error message accessibility 5. Test keyboard navigation (tab order) ``` #### 2. Heading Structure Validation ``` 1. Take verbose snapshot 2. Filter for role: "heading" 3. Verify logical hierarchy (h1 → h2 → h3) 4. Check no heading levels skipped ``` #### 3. Interactive Element Audit ``` 1. Take snapshot 2. Identify all focusable elements 3. Verify accessible names for buttons/links 4. Check ARIA roles match functionality 5. Validate state attributes (disabled, checked, etc.) ``` #### 4. Screen Reader Simulation ``` 1. Take verbose snapshot 2. Review accessible name + description for each element 3. Verify information available without visual context 4. Check landmarks (navigation, main, complementary) 5. Validate skip links and focus management ``` ### Accessibility Workflow Best Practices 1. **Use standard snapshot first** - Verbose mode only when detailed analysis needed 2. **Combine with visual testing** - Take screenshot + snapshot for complete picture 3. **Test dynamic content** - Re-snapshot after interactions to verify state changes 4. **Validate forms thoroughly** - Check labels, error messages, required indicators 5. **Review ignored nodes** - Verbose mode shows why elements are ignored 6. **Check relationships** - Verify aria-labelledby and aria-describedby connections --- ## 4. Browser Automation Workflow Automate user interactions with reliable element targeting via accessibility UIDs. ### Tools Required - `click` - Click or double-click elements - `fill` - Fill single form field - `fill_form` - Fill multiple form fields simultaneously - `hover` - Hover over elements - `drag` - Drag element onto another element - `handle_dialog` - Handle browser dialogs (alerts, confirms, prompts) - `upload_file` - Upload files to input elements - `wait_for` - Wait for text to appear ### Automation Pattern: Snapshot → Identify → Interact → Wait This is the fundamental pattern for all browser automation: ``` 1. SNAPSHOT: Get current page state - Tool: take_snapshot - Returns: Element UIDs for interaction 2. IDENTIFY: Find target element UID - Parse snapshot output - Locate element by role, name, or text 3. INTERACT: Perform action using UID - Tool: click, fill, hover, drag, etc. - Parameter: uid from snapshot 4. WAIT: Confirm action result - Tool: wait_for - Wait for expected text/state change ``` ### Step-by-Step Automation Examples #### Example 1: Form Submission ``` 1. Navigate to form page - Tool: navigate_page - URL: https://example.com/contact 2. Take snapshot - Tool: take_snapshot - Identify: [2] textbox "Name", [3] textbox "Email", [4] button "Submit" 3. Fill form fields - Tool: fill_form - Parameters: [ {uid: "2", value: "John Doe"}, {uid: "3", value: "john@example.com"} ] 4. Click submit button - Tool: click - Parameter: uid: "4" 5. Wait for confirmation - Tool: wait_for - Parameter: text: "Thank you for your submission" ``` #### Example 2: File Upload ``` 1. Take snapshot - Tool: take_snapshot - Identify: [5] "Choose File" button (file input) 2. Upload file - Tool: upload_file - Parameters: uid: "5", filePath: "/path/to/document.pdf" 3. Wait for upload confirmation - Tool: wait_for - Parameter: text: "Upload complete" ``` #### Example 3: Drag and Drop ``` 1. Take snapshot - Tool: take_snapshot - Identify: [10] draggable item, [11] drop target 2. Drag element - Tool: drag - Parameters: from_uid: "10", to_uid: "11" 3. Wait for drop confirmation - Tool: wait_for - Parameter: text: "Item moved successfully" ``` #### Example 4: Dialog Handling ``` 1. Click element that triggers dialog - Tool: click - Parameter: uid: "7" 2. Handle dialog - Tool: handle_dialog - Parameters: action: "accept" (or "dismiss") - Optional: promptText: "User input" (for prompt dialogs) ``` #### Example 5: Hover Interactions ``` 1. Take snapshot - Tool: take_snapshot - Identify: [15] element with hover state 2. Hover over element - Tool: hover - Parameter: uid: "15" 3. Take new snapshot to verify hover state - Tool: take_snapshot - Check for newly visible elements (tooltips, dropdowns) ``` #### Example 6: Double-Click ``` 1. Take snapshot - Tool: take_snapshot - Identify: [20] element requiring double-click 2. Double-click element - Tool: click - Parameters: uid: "20", dblClick: true ``` ### Complex Automation Workflows #### Multi-Step Form with Validation ``` 1. Navigate to form 2. Take snapshot → identify all fields 3. Fill first field → wait for validation 4. Take new snapshot (validation may show/hide elements) 5. Fill remaining fields 6. Click submit → handle any confirmation dialog 7. Wait for success message ``` #### Dynamic Content Interaction ``` 1. Navigate to page 2. Take snapshot → identify load-more button 3. Click load-more → wait for new content text 4. Take new snapshot (new UIDs for new elements) 5. Interact with newly loaded elements 6. Repeat as needed ``` #### Dropdown Navigation ``` 1. Take snapshot → identify dropdown trigger 2. Hover over trigger → wait for dropdown appearance 3. Take new snapshot → identify dropdown options 4. Click option → wait for navigation ``` ### Automation Workflow Best Practices 1. **Always snapshot before interaction** - Element UIDs change on page updates 2. **Use fill_form for multiple fields** - More efficient than multiple fill calls 3. **Wait after actions** - Use wait_for to ensure action completed 4. **Re-snapshot after dynamic changes** - New elements get new UIDs 5. **Handle dialogs immediately** - Automation blocks until dialog handled 6. **Combine with screenshots** - Visual verification of automation steps 7. **Timeout configuration** - Set appropriate timeout values for wait_for --- ## 5. Multi-Tab Management Workflow Manage multiple browser tabs/pages with context switching. ### Tools Required - `list_pages` - List all open pages/tabs - `new_page` - Open new page/tab - `select_page` - Switch active page context - `close_page` - Close page/tab (cannot close last page) ### Step-by-Step Process #### Basic Tab Management ``` 1. List current pages - Tool: list_pages - Returns: Array of pages with pageIdx identifiers 2. Create new page - Tool: new_page - Parameters: url (optional), timeout (optional) - Returns: New page created and becomes active 3. Switch between pages - Tool: select_page - Parameter: pageIdx (from list_pages) 4. Close page - Tool: close_page - Parameter: pageIdx - Note: Cannot close last remaining page ``` #### Multi-Tab Workflow Example ``` 1. List existing pages - Tool: list_pages - Example output: [ {pageIdx: 0, url: "https://example.com", title: "Example"}, {pageIdx: 1, url: "https://test.com", title: "Test"} ] 2. Open new page - Tool: new_page - Parameters: url: "https://newpage.com", timeout: 30000 - New page automatically selected 3. Perform actions on new page - Tools: take_snapshot, click, fill, etc. - All tools operate on currently selected page 4. Switch to existing page - Tool: select_page - Parameter: pageIdx: 0 5. Perform actions on original page - Context now on pageIdx: 0 6. Close page when done - Tool: close_page - Parameter: pageIdx: 1 ``` ### Tab Switching Strategies #### Strategy 1: Sequential Processing Process multiple pages one at a time: ``` 1. List all pages 2. For each page: a. Select page (select_page) b. Take snapshot c. Perform analysis/interaction d. Store results 3. Close completed pages ``` #### Strategy 2: Background Tab Loading Open multiple tabs, then process: ``` 1. Open multiple pages in background - new_page (URL 1) - new_page (URL 2) - new_page (URL 3) 2. List pages to get all pageIdx values 3. Process each page: - select_page → analyze → next page ``` #### Strategy 3: Comparison Testing Compare same action across multiple pages: ``` 1. Open pages for comparison - new_page (Version A) - new_page (Version B) 2. For each page: a. Select page b. Take performance trace c. Store metrics 3. Compare results across pages ``` #### Strategy 4: Frame Handling Work with pages containing iframes: ``` 1. Navigate to page with frames 2. take_snapshot shows frame structure 3. Interact with main page elements 4. CDP Target domain handles frame attachment automatically ``` ### Page Selection Best Practices 1. **Always list before selecting** - Page indices may change after close operations 2. **Track page context** - Remember which pageIdx corresponds to which task 3. **Cannot close last page** - Keep at least one page open at all times 4. **New pages auto-select** - After new_page, it becomes active context 5. **Timeout for slow loads** - Set appropriate timeout for new_page operations 6. **Session persistence** - Pages persist across navigation within same session ### Multi-Tab Use Cases #### Use Case 1: Cross-Browser Testing ``` 1. Open same URL in multiple pages 2. Each page with different emulation settings 3. Compare snapshots/screenshots across pages ``` #### Use Case 2: Multi-Step User Flows ``` 1. Page 1: Login 2. Page 2: Dashboard 3. Page 3: Settings 4. Switch between pages to verify state persistence ``` #### Use Case 3: Performance Comparison ``` 1. Page 1: Production site 2. Page 2: Staging site 3. Run identical performance traces on both 4. Compare Core Web Vitals ``` #### Use Case 4: Data Extraction ``` 1. Open multiple product pages 2. For each page: - Select page - Take snapshot - Extract product data - Store results 3. Close pages when done ``` --- ## 6. Device Emulation Workflow Simulate different devices, network conditions, and performance constraints. ### Tools Required - `emulate_network` - Simulate network conditions - `emulate_cpu` - Simulate CPU throttling - `resize_page` - Change viewport dimensions ### Step-by-Step Process #### Basic Device Emulation ``` 1. Set viewport size - Tool: resize_page - Parameters: width (pixels), height (pixels) - Example: width: 375, height: 812 (iPhone X) 2. Configure network emulation - Tool: emulate_network - Parameter: throttlingOption - Options: "No emulation", "Offline", "Slow 3G", "Fast 3G", "Slow 4G", "Fast 4G" 3. Configure CPU throttling - Tool: emulate_cpu - Parameter: throttlingRate (1-20x) - Example: 4 (4x slowdown, simulates low-end device) 4. Navigate to page under test - Tool: navigate_page - Page loads with emulation applied 5. Run performance tests - Tools: performance_start_trace, performance_stop_trace - Metrics reflect emulated conditions ``` #### Mobile Device Testing ``` 1. Configure mobile viewport - Tool: resize_page - Common sizes: - iPhone 14 Pro: 393 x 852 - iPhone SE: 375 x 667 - Pixel 7: 412 x 915 - Galaxy S22: 360 x 800 2. Set mobile network - Tool: emulate_network - Parameter: throttlingOption: "Fast 4G" - Simulates typical mobile connection 3. Set CPU throttling - Tool: emulate_cpu - Parameter: throttlingRate: 4 - Simulates mid-range mobile device 4. Take snapshot/screenshot - Tools: take_snapshot, take_screenshot - Verify mobile layout 5. Test mobile interactions - Tools: click, fill, drag - Interactions work identically on emulated mobile ``` #### Tablet Device Testing ``` 1. Configure tablet viewport - Tool: resize_page - Common sizes: - iPad Pro 12.9": 1024 x 1366 - iPad Air: 820 x 1180 - Surface Pro: 912 x 1368 2. Set network conditions - Tool: emulate_network - Parameter: throttlingOption: "Fast 4G" or "No emulation" (WiFi) 3. Test responsive breakpoints - Resize between tablet/desktop sizes - Verify layout changes ``` ### Network Emulation Options **Available Throttling Profiles:** 1. **No emulation** (default) - Full network speed - No artificial latency 2. **Offline** - Simulates no network connection - Tests offline functionality, service workers 3. **Slow 3G** - Download: ~400 Kbps - Upload: ~400 Kbps - Latency: ~2000ms - Use for: Extreme mobile testing 4. **Fast 3G** - Download: ~1.6 Mbps - Upload: ~750 Kbps - Latency: ~562ms - Use for: Typical 3G mobile 5. **Slow 4G** - Download: ~4 Mbps - Upload: ~3 Mbps - Latency: ~150ms - Use for: Poor LTE conditions 6. **Fast 4G** - Download: ~10 Mbps - Upload: ~5 Mbps - Latency: ~40ms - Use for: Good LTE conditions ### CPU Throttling Configuration **Throttling Rate Scale:** 1-20x - **1x** - No throttling (default) - **4x** - Mid-range mobile device - **6x** - Low-end mobile device - **10x+** - Extreme performance constraints **Use Cases:** - Test Time to Interactive (TTI) on slow devices - Identify JavaScript performance bottlenecks - Measure TBT under constrained conditions - Validate progressive enhancement ### Viewport Resize Patterns #### Common Device Dimensions **Smartphones (Portrait):** - iPhone 14 Pro Max: 430 x 932 - iPhone 14 Pro: 393 x 852 - iPhone 14: 390 x 844 - iPhone SE: 375 x 667 - Pixel 7 Pro: 412 x 915 - Pixel 7: 412 x 915 - Galaxy S22 Ultra: 384 x 854 - Galaxy S22: 360 x 800 **Tablets:** - iPad Pro 12.9": 1024 x 1366 - iPad Pro 11": 834 x 1194 - iPad Air: 820 x 1180 - iPad Mini: 744 x 1133 - Surface Pro 8: 912 x 1368 **Desktop:** - MacBook Air 13": 1280 x 832 - MacBook Pro 14": 1512 x 982 - Desktop 1080p: 1920 x 1080 - Desktop 4K: 3840 x 2160 ### Emulation Workflow Examples #### Example 1: Mobile Performance Audit ``` 1. Resize to mobile - resize_page: width: 375, height: 812 2. Set mobile network - emulate_network: throttlingOption: "Fast 4G" 3. Set CPU throttling - emulate_cpu: throttlingRate: 4 4. Start performance trace - performance_start_trace: reload: true, autoStop: true 5. Analyze results - performance_stop_trace - Check INP, LCP, CLS under mobile conditions ``` #### Example 2: Offline Mode Testing ``` 1. Set offline mode - emulate_network: throttlingOption: "Offline" 2. Navigate to page - navigate_page - Should trigger offline fallback 3. Verify service worker - take_snapshot - Check offline content displayed 4. Restore network - emulate_network: throttlingOption: "No emulation" ``` #### Example 3: Responsive Design Testing ``` 1. Test mobile breakpoint - resize_page: width: 375, height: 667 - take_screenshot (mobile layout) 2. Test tablet breakpoint - resize_page: width: 768, height: 1024 - take_screenshot (tablet layout) 3. Test desktop breakpoint - resize_page: width: 1920, height: 1080 - take_screenshot (desktop layout) 4. Compare screenshots for layout consistency ``` #### Example 4: Network Speed Comparison ``` 1. Baseline (no throttling) - emulate_network: "No emulation" - Run performance trace - Record load time 2. Fast 4G - emulate_network: "Fast 4G" - Run performance trace - Compare load time 3. Slow 3G - emulate_network: "Slow 3G" - Run performance trace - Compare load time 4. Analyze network waterfall for bottlenecks ``` ### Emulation Best Practices 1. **Reset emulation between tests** - Set to "No emulation" and throttlingRate: 1 2. **Combine emulation types** - Use network + CPU + viewport together 3. **Match real-world conditions** - Fast 4G + 4x CPU = typical mobile experience 4. **Test offline gracefully** - Verify service worker, error messages, fallback content 5. **Validate responsive breakpoints** - Test at exact breakpoint boundaries 6. **Document test conditions** - Record emulation settings with results 7. **Compare against field data** - Lab emulation should match real user metrics from CrUX ### Mobile Device Testing Workflow Complete mobile testing checklist: ``` 1. Set device viewport (resize_page) 2. Configure network (emulate_network: "Fast 4G") 3. Configure CPU (emulate_cpu: 4) 4. Navigate to page 5. Take accessibility snapshot (take_snapshot) 6. Run performance trace (performance_start_trace/stop) 7. Test touch interactions (click, drag) 8. Verify mobile-specific features (hamburger menu, gestures) 9. Take screenshots for visual verification 10. Reset emulation for next test ``` --- ## Workflow Combination Strategies Many real-world testing scenarios combine multiple workflows: ### Strategy 1: Complete Performance Audit ``` 1. Device Emulation Setup - Mobile viewport, Fast 4G, 4x CPU 2. Performance Analysis - Start trace with reload - Stop trace and analyze Core Web Vitals 3. Network Monitoring - List network requests - Filter for large resources - Check total payload size 4. Accessibility Testing - Take verbose snapshot - Verify mobile accessibility ``` ### Strategy 2: Cross-Device Comparison ``` 1. Multi-Tab Setup - Page 1: Mobile (375x667) - Page 2: Tablet (768x1024) - Page 3: Desktop (1920x1080) 2. For each page: - Select page - Run performance trace - Take screenshot - Export results 3. Compare metrics across devices ``` ### Strategy 3: End-to-End User Flow ``` 1. Browser Automation - Navigate through multi-step flow - Fill forms, click buttons 2. Performance Monitoring - Trace each step - Measure interaction latency 3. Network Analysis - Track requests at each step - Identify slow API calls 4. Accessibility Validation - Snapshot at each step - Verify keyboard navigation ``` --- ## CDP Domain Reference Each workflow leverages specific Chrome DevTools Protocol domains: - **Performance Analysis:** Tracing, Performance - **Network Monitoring:** Network - **Accessibility Testing:** Accessibility (Experimental) - **Browser Automation:** Input, Runtime, DOM - **Multi-Tab Management:** Target, Page - **Device Emulation:** Emulation For complete CDP documentation, see: https://chromedevtools.github.io/devtools-protocol/ --- **Document Version:** 1.0 **Last Updated:** October 24, 2025 **Based on:** chrome-devtools-mcp v0.5.1