
playwright-tab-comparison
by dawiddutoit
Collection of Claude Code skills, agents, and plugins
SKILL.md
name: playwright-tab-comparison description: Open multiple browser tabs and compare content, behavior, or visual appearance across pages. Use when comparing staging vs production, A/B testing page variants, testing cross-browser consistency, verifying content parity, or analyzing differences between multiple URLs. Trigger phrases include "compare these pages", "open multiple tabs and compare", "test consistency across", "A/B test", "staging vs production", or "compare versions". Works with Playwright MCP browser automation tools for multi-tab workflows.
Playwright Tab Comparison
Open multiple browser tabs and systematically compare content, behavior, or visual appearance across pages.
Quick Start
User: "Compare the staging and production checkout pages"
Workflow:
1. Create/list tabs
2. Navigate tab 1 to staging URL
3. Navigate tab 2 to production URL
4. For each tab: capture snapshot + screenshot + extract data
5. Generate comparison report
When to Use This Skill
Explicit triggers:
- "Compare these pages"
- "Open multiple tabs and compare"
- "Test cross-browser consistency"
- "A/B test these variants"
- "Compare staging vs production"
Implicit triggers:
- User provides multiple URLs to analyze
- Testing consistency across environments
- Verifying content parity
- Evaluating page variants
Use cases:
- A/B testing different landing page designs
- Comparing staging vs production environments
- Cross-browser consistency validation
- Multi-variant feature testing
- Content parity verification
- Performance comparison
Core Workflow
Step 1: Tab Setup
List existing tabs:
browser_tabs(action="list")
Create additional tabs:
# Create new tab
browser_tabs(action="new")
# Switch to specific tab (0-indexed)
browser_tabs(action="select", index=1)
Step 2: Navigate Each Tab
Navigate each tab to its target URL:
# Tab 1: Production
browser_tabs(action="select", index=0)
browser_navigate(url="https://example.com/checkout")
# Tab 2: Staging
browser_tabs(action="select", index=1)
browser_navigate(url="https://staging.example.com/checkout")
# Tab 3: Variant A
browser_tabs(action="select", index=2)
browser_navigate(url="https://example.com/checkout?variant=a")
Step 3: Capture Data from Each Tab
For each tab, collect comparison data:
a) Capture accessibility snapshot:
browser_snapshot(filename="tab1-snapshot.md")
b) Take screenshot:
browser_take_screenshot(filename="tab1-screenshot.png", fullPage=True)
c) Extract structured data:
browser_evaluate(function="""
() => {
return {
title: document.title,
url: window.location.href,
headingCount: document.querySelectorAll('h1, h2, h3').length,
buttonCount: document.querySelectorAll('button').length,
formCount: document.querySelectorAll('form').length,
// Custom extraction logic
productPrice: document.querySelector('.price')?.textContent,
ctaText: document.querySelector('.cta-button')?.textContent
};
}
""")
d) Capture network activity (optional):
browser_network_requests()
Step 4: Structure Tab Data
Organize captured data into JSON for comparison:
[
{
"tab_index": 0,
"url": "https://example.com/checkout",
"snapshot": "tab1-snapshot.md",
"screenshot": "tab1-screenshot.png",
"data": {
"title": "Checkout - Example",
"headingCount": 5,
"productPrice": "$49.99"
},
"timestamp": "2025-12-20T10:30:00Z"
},
{
"tab_index": 1,
"url": "https://staging.example.com/checkout",
"snapshot": "tab2-snapshot.md",
"screenshot": "tab2-screenshot.png",
"data": {
"title": "Checkout - Staging",
"headingCount": 6,
"productPrice": "$49.99"
},
"timestamp": "2025-12-20T10:30:15Z"
}
]
Save to tab-data.json.
Step 5: Compare Results
Option A: Use comparison script
python scripts/compare_tabs.py tab-data.json
Outputs:
- Text summary of differences
- JSON comparison file
Option B: Manual comparison
Compare key metrics:
- Element counts (headings, buttons, forms)
- Extracted data values (prices, CTA text)
- Visual appearance (review screenshots side-by-side)
- Network patterns (request counts, API endpoints)
Step 6: Generate Report
Create HTML report with side-by-side comparison:
python scripts/generate_comparison_report.py tab-data.json comparison-report.html
Open comparison-report.html in browser to view:
- Screenshots side-by-side
- Extracted data comparison
- Element count statistics
Comparison Strategies
Choose strategy based on what you're testing:
Visual Comparison - Screenshots for design consistency Content Comparison - Snapshots for structure/content parity Behavioral Comparison - Network requests for functionality testing Performance Comparison - Network timing for optimization Data Extraction Comparison - Evaluate for structured data validation
See references/comparison-strategies.md for detailed guidance.
Example: Staging vs Production
# 1. Setup tabs
browser_tabs(action="list") # Check existing
browser_tabs(action="new") # Create second tab
# 2. Navigate tabs
browser_tabs(action="select", index=0)
browser_navigate(url="https://example.com/products")
browser_tabs(action="select", index=1)
browser_navigate(url="https://staging.example.com/products")
# 3. Collect data from both tabs
tabs_data = []
for i in [0, 1]:
browser_tabs(action="select", index=i)
# Snapshot
browser_snapshot(filename=f"tab{i}-snapshot.md")
# Screenshot
browser_take_screenshot(filename=f"tab{i}-screenshot.png", fullPage=True)
# Extract data
result = browser_evaluate(function="""
() => ({
url: window.location.href,
productCount: document.querySelectorAll('.product-card').length,
categories: Array.from(document.querySelectorAll('.category')).map(c => c.textContent)
})
""")
tabs_data.append({
"tab_index": i,
"snapshot": f"tab{i}-snapshot.md",
"screenshot": f"tab{i}-screenshot.png",
"data": result
})
# Save for comparison
import json
with open('tab-data.json', 'w') as f:
json.dump(tabs_data, f, indent=2)
# 4. Generate report
# Run: python scripts/generate_comparison_report.py tab-data.json report.html
Resources
scripts/
compare_tabs.py - Analyzes tab data and generates comparison summary
- Input:
tab-data.json(structured tab data) - Output: Text summary + JSON comparison file
- Compares element counts, identifies differences
generate_comparison_report.py - Creates HTML visual comparison report
- Input:
tab-data.json+assets/report-template.html - Output: HTML file with side-by-side screenshots and data
- Embeds screenshots as base64
references/
mcp-playwright-tools.md - Quick reference for Playwright MCP tools used in this workflow (browser_tabs, browser_navigate, browser_snapshot, browser_evaluate, browser_take_screenshot)
comparison-strategies.md - Detailed guide for choosing comparison approach (visual, content, behavioral, performance, data extraction, hybrid)
assets/
report-template.html - HTML template for comparison reports with responsive grid layout and embedded styling
Expected Outcomes
Successful comparison:
- Multiple tabs opened and navigated
- Data captured from each tab (snapshots, screenshots, extracted data)
- Differences identified and documented
- HTML report generated showing side-by-side comparison
Common differences to identify:
- Element count variations
- Content changes (text, prices, CTAs)
- Visual appearance differences
- Network request patterns
- Performance metrics
Requirements
Tools:
- Playwright MCP browser automation
- Python 3.x for scripts
- Browser with tab support
Data structure:
- tab-data.json with consistent schema
- Screenshots saved to accessible paths
- Snapshots saved as markdown files
Red Flags to Avoid
- Opening too many tabs (>5) without cleanup
- Not waiting for page load before capturing data
- Inconsistent viewport sizes across tabs (affects visual comparison)
- Not saving tab data before closing tabs
- Forgetting to switch tabs before navigation/capture
- Comparing pages in different states (e.g., logged in vs logged out)
- Not handling dynamic content (timers, ads, animations)
Notes
- Tab indices are 0-based (first tab = 0)
- Always select tab before performing actions on it
- Screenshots capture current viewport unless fullPage=True
- Snapshots provide accessibility tree (better for content analysis)
- Evaluate runs JavaScript in tab context (has access to document/window)
- Network requests captured from page load onwards
- Reports embed screenshots as base64 (no external dependencies)
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon