qa-testing-cross-browser-compatibility
Testing Cross-Browser Compatibility
This skill validates application consistency across browsers and viewports, using intelligent testing strategies that account for known browser-specific quirks rather than naive screenshot comparison.
When to Use
- After CSS changes to verify cross-browser consistency
- Before release to validate the browser support matrix
- When users report "it works in Chrome but not Safari"
- To audit responsive design breakpoints
- When migrating CSS frameworks or removing polyfills
Workflow
Step 1 — Define the Test Matrix
Generate a matrix from the default or custom configuration:
from scripts.browser_setup import generate_browser_matrix
# Default: 3 browsers × 3 viewports = 9 combinations
matrix = generate_browser_matrix()
# Custom matrix
matrix = generate_browser_matrix(
browsers=["chromium", "webkit"],
viewports=["mobile-portrait", "desktop"],
)
Or provide a JSON configuration:
{
"browsers": ["chromium", "firefox", "webkit"],
"viewports": ["mobile-portrait", "tablet-portrait", "desktop"],
"pages": ["/", "/login", "/dashboard", "/checkout"],
"reference": "chromium-desktop"
}
Step 2 — Capture Across Matrix
Use the matrix runner to capture all combinations:
python skills/qa-testing-cross-browser-compatibility/scripts/matrix_runner.py \
--url https://staging.example.com \
--matrix matrix.json \
--output browser-results/captures/
This captures screenshots of each page in each browser × viewport combination.
Step 3 — Cross-Comparison
Compare all combinations against the reference (default: Chromium Desktop):
python skills/qa-testing-cross-browser-compatibility/scripts/cross_compare.py \
--captures browser-results/captures/ \
--reference chromium-desktop \
--output browser-results/
Step 4 — Functional Validation
Beyond visual comparison, test browser-specific functionality:
python skills/qa-testing-cross-browser-compatibility/scripts/functional_check.py \
--url https://staging.example.com \
--matrix matrix.json \
--output browser-results/functional/
Browser-Specific Quirks to Test
WebKit (Safari / iOS)
Safari has the most rendering differences from Chromium. Always check:
- 100vh issue: On mobile Safari, 100vh includes the toolbar area, pushing content
below the fold. Use
100dvhor JavaScript-based height calculation. - position: sticky: Can break inside overflow containers or with
-webkit-overflow-scrolling: touch - Date inputs: Safari renders date pickers differently;
<input type="date">may not supportmin/maxattributes properly - Backdrop-filter: Requires
-webkit-backdrop-filterprefix - Flexbox gaps: Older Safari versions don't support
gapin flexbox (only grid) - Scroll behavior:
scroll-behavior: smoothsupport is inconsistent - Font rendering: Safari uses different font smoothing, affecting text width calculations
- Form elements: Select dropdowns, checkboxes, and radio buttons render with platform-native styling that can't be fully overridden
Firefox
Firefox follows standards strictly, which sometimes differs from Chromium's behavior:
- Scrollbar styling: Uses
scrollbar-widthandscrollbar-colorinstead of::-webkit-scrollbar - Form element styling: More resistant to custom form styling
- CSS Grid subgrid: Firefox had earlier subgrid support; check for Chrome compatibility
- Text overflow: Slightly different text wrapping calculations
accent-color: May render differently on form elements- Print styling: Firefox has stricter print stylesheet handling
Chromium (Chrome / Edge)
Usually the most forgiving, but watch for:
- Over-reliance on
-webkit-prefixes that won't work elsewhere - Experimental CSS features enabled by default in Chrome but not in other browsers
- Extension interference — test in incognito mode
- Memory usage — heavy DOM operations may perform differently
Viewport-Specific Checks
Mobile (< 768px)
- Touch targets are at least 44×44px
- No horizontal scroll (overflow-x)
- Navigation collapses to hamburger menu
- Font sizes are readable without zooming (≥16px)
- Forms don't zoom in on focus (set font-size ≥ 16px on inputs)
- Tap-to-call on phone numbers works
Tablet (768px – 1024px)
- Layout adapts between mobile and desktop breakpoints
- Side panels collapse or become toggleable
- Tables scroll horizontally or restructure
- Images resize proportionally
Desktop (> 1024px)
- Content doesn't stretch beyond max-width
- Hover states are visible and responsive
- Keyboard navigation works for all interactive elements
- Multi-column layouts render correctly
Issue Classification
When a difference is found, classify it:
Browser-specific bug: Appears in one browser, all viewports → Likely a CSS prefix issue or unsupported property
Viewport-specific bug: Appears in one viewport, all browsers → Likely a responsive design / media query issue
Compound bug: One specific browser × viewport combination → May be an interaction between browser rendering and responsive rules
Universal inconsistency: Different from Figma in all combinations → Implementation doesn't match design (not a browser issue)
Output
browser-results/
├── matrix.json ← executed test matrix
├── captures/
│ ├── chromium-desktop/
│ │ ├── homepage.png
│ │ └── checkout.png
│ ├── firefox-desktop/
│ ├── webkit-mobile-portrait/
│ └── ...
├── comparisons/
│ ├── homepage-cross-browser.json
│ └── checkout-cross-browser.json
├── functional/
│ ├── chromium-desktop.json
│ └── webkit-mobile-portrait.json
├── bugs/
│ └── bug-001-webkit-sticky-header.json
└── browser-summary.md
Each bug includes affected_browsers and affected_viewports arrays so developers
know exactly which environments to target.
More from wizeline/sdlc-agents
processing-pdfs
Use this action whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this action.
19authoring-technical-docs
Core documentation engineering action. Provides the quality framework, style rules, and multi-pass workflow (research → draft → review → format) that all documentation must follow. Load this first for any technical documentation task. If no domain action matches the request, this action alone is sufficient.
19authoring-release-docs
Use when producing release-oriented documentation — release notes, changelogs, READMEs, or migration guides. Triggers: 'write release notes', 'generate a changelog', 'create a README', 'document what changed', 'write migration guide', any task involving Jira exports, commit logs, or ticket lists that need to become user-facing documentation. Always load authoring-technical-docs first.
19automating-docs-updates
Automatically handles documentation updates whenever a user requests to commit and push changes through Git. Reads the changes being committed and updates the relevant documentation accordingly.
18qa-generating-bug-reports
>
8code-review-optimizing
>
7