Cross-Browser and Cross-Device Testing

Cross-browser testing checks that a web application works correctly in the browsers its users actually use. Cross-device testing extends the check to the devices themselves: phones, tablets and computers that differ in operating system, screen, input method and hardware. A checkout that works in Chrome on a Windows laptop can still show a broken order summary in Safari on an older iPhone, or a fee explanation that nobody on a phone can open.

Nobody can test every browser on every device, so the skill lies in choosing: grouping browsers by engine, turning usage data into a support matrix, and deciding where each test runs.

Why it matters

Browsers implement the same web standards with different code, at different speeds and with different defaults. A CSS rule, a form control or a JavaScript API that works in one engine can be missing or behave differently in another, and the failure reaches only that browser’s users: a whole group of customers who cannot finish a task while every browser in the office shows nothing wrong.

Testing too little leaves the most-used phone browser unchecked; testing everything everywhere multiplies the effort for little gain. A documented, data-based choice lets the tester say exactly what was tested, where, and which risk remains.

What changes between browsers and devices

The lesson on responsive testing asked whether a layout adapts to the viewport size. Here the question is different: does the same page behave correctly in another engine, on another operating system, with another input method? You run the existing critical journeys, such as sign-in, search and checkout, in each environment and watch for these differences:

  • Engine and version: how HTML and CSS are rendered, and which CSS features and JavaScript APIs exist.
  • Operating system: installed fonts (important for Arabic and Devanagari), native date pickers and select lists, file and permission dialogs.
  • Input: touch, mouse or keyboard. A menu that opens only on hover has no reliable trigger on a touch screen.
  • Device and settings: an on-screen keyboard covering half the page, toolbars that appear and disappear, a slow budget phone, zoom, dark mode and blocked third-party cookies.

Try it: Test Scenario Generator

Browser engines: count engines, not browser names

A browser engine is the part of a browser that turns HTML, CSS and JavaScript into the page you see. Three engine families cover the browsers most users have: Blink, in Chrome, Microsoft Edge, Opera, Samsung Internet and other browsers built on Chromium, the open-source code base behind Chrome; Gecko, in Firefox; and WebKit, in Safari. Each family also has its own JavaScript engine: V8, SpiderMonkey and JavaScriptCore.

This changes how you count coverage. Chrome and Edge on Windows share Blink, so a rendering defect usually appears in both; the second browser adds little engine coverage, although it has its own autofill and privacy settings. On iPhone and iPad, Apple has long required browsers to use WebKit and allows other engines only in some regions, so Chrome on an iPhone normally behaves like Safari, not like Chrome on Android.

Versions matter too: Safari on an iPhone is updated only with iOS, so an iPhone that cannot install the latest iOS keeps an older Safari. Before the team relies on a newer CSS or JavaScript feature, check the browser compatibility table on the feature’s MDN page.

A bug reporter’s browser can be read from the User-Agent request header, with care: Chrome on iOS, for example, identifies itself with CriOS but renders with WebKit.

Try it: User-Agent Parser Try it: Request Header Inspector

The support matrix: from usage data to tiers

A support matrix is the agreed list of browser, operating system and device combinations the product supports, with the depth of testing each one receives. It belongs in the test plan and is agreed by product, development and QA together, because it is also a promise to users.

Build it from evidence, not from the devices the team happens to own: analytics that count completed tasks such as orders as well as sessions, browsers named in the contract, and combinations that caused incidents. Then sort the rows into tiers:

  • Tier 1: most of the traffic or revenue. Every release runs the critical journeys and the regression set, on real devices.
  • Tier 2: smaller but meaningful. Every release runs a smoke set of critical journeys.
  • Tier 3: best effort. Checked before major releases or when a user reports a problem.
  • Engine rule: every engine your users have gets at least one combination in Tier 2 or higher, however small its share, because it can show defects no other browser in the matrix can.
  • Pairwise rule: language, account state, zoom and dark mode interact with the engine too. Keep a tier’s platforms fixed and combine the other parameters by pairwise selection, as in the lesson on pairwise testing.
  • Agree what users of an unsupported browser see, such as a clear message instead of a broken page, and review the matrix regularly, for example every quarter.

Try it: Pairwise Testing Generator

Where to run: local browsers, emulators and cloud device labs

Desktop browsers can be installed locally, with limits: Safari runs only on Apple computers, and the iOS Simulator needs a Mac with Xcode. The DevTools device toolbar changes the viewport, not the engine. Android emulators and the iOS Simulator run mobile browsers without the real hardware, so touch, the on-screen keyboard, the camera and the speed of a budget phone need real devices.

Cloud device labs, also called device farms, rent real phones, tablets and desktop browsers hosted by a provider. You open them in your own browser for manual sessions or run automated suites on them, with screenshots, videos and logs recorded. They give breadth without buying devices, but plan for their limits:

  • A test environment that is not public needs the lab’s secure tunnel, a connection that lets the lab’s devices reach your private network, or an allow-list of the lab’s addresses, agreed with the team that owns the environment.
  • Devices are shared and reset between sessions: use test accounts and synthetic data, never real customer data or personal accounts.
  • Network, location and speed are the lab’s, not your users’, so do not judge performance there.
  • Plans limit minutes and parallel sessions: run full suites on Tier 1 and smoke sets on Tier 2.

Worked example: a support matrix for an online shop

An online shop serves customers in Saudi Arabia in Arabic and English. The team exports 90 days of analytics, adds the engine to each row and applies its tier rule: 10% or more of sessions or orders is Tier 1, 2% up to 10% is Tier 2, under 2% is Tier 3. The numbers are illustrative.

Safari on iOS, Chrome on Android and Chrome on Windows become Tier 1. Chrome on iOS stays in Tier 2 although it shares WebKit with Safari, because its toolbar and autofill differ. Firefox is the only Gecko browser and has at most 1% anywhere, so the engine rule raises its largest combination, Firefox on Windows, to Tier 2. For Tier 1, pairwise selection combines the three platforms with language (Arabic, English) and account (guest, signed in): every pair of values in 6 runs instead of 12.

One shop’s support matrix: three combinations are Tier 1, every browser on iOS renders with WebKit, and Firefox on Windows is raised to Tier 2 as the largest Gecko combination.
BrowserOperating system
WindowsmacOSAndroidiOSevery browser: WebKit
ChromeBlink; WebKit on iOSTier 1Blink · 12% · 14%Tier 3Blink · <1%Tier 1Blink · 27% · 22%Tier 2WebKit · 4% · 4%
SafariWebKitnot in the matrix: no such browser or no sessionsTier 2WebKit · 3% · 4%not in the matrix: no such browser or no sessionsTier 1WebKit · 38% · 41%
EdgeBlink; WebKit on iOSTier 2Blink · 5% · 7%Tier 3Blink · <1%Tier 3Blink · <1%Tier 3WebKit · <1%
Samsung InternetBlinknot in the matrix: no such browser or no sessionsnot in the matrix: no such browser or no sessionsTier 2Blink · 7% · 5%not in the matrix: no such browser or no sessions
FirefoxGecko; WebKit on iOSTier 2Gecko · 1% · 1%Tier 3Gecko · <1%Tier 3Gecko · <1%Tier 3WebKit · <1%
  • Tier 1: critical journeys and regression set on real devices, every release
  • Tier 2: smoke set of critical journeys, every release
  • Tier 3: best effort, before major releases or on user reports
  • Raised from Tier 3 by the engine rule: the largest Gecko combination
  • WebKit · 38% · 41%engine · share of sessions · share of orders

Illustrative numbers from one shop’s analytics, last 90 days. Build your own matrix from your own data.

  • WebKit only: on iPhones that cannot update past an older iOS, the order summary loses its layout because it uses a CSS feature older Safari versions lack. Chrome on the same iPhone fails too: one engine defect, not two browser defects.
  • Edge only: autofill puts the district into the street field because the address fields lack autocomplete attributes. Chrome guesses correctly; the cause is the form, exposed by one browser’s feature.
  • Every touch device: the delivery-fee explanation opens only on mouse hover, so phone users cannot open it. No desktop run could have found it.
Text version
Online shop — last 90 days (illustrative numbers)

Browser · OS                  Engine   Sessions  Orders  Tier
Safari · iOS                  WebKit      38%      41%   1
Chrome · Android              Blink       27%      22%   1
Chrome · Windows              Blink       12%      14%   1
Samsung Internet · Android    Blink        7%       5%   2
Edge · Windows                Blink        5%       7%   2
Chrome · iOS                  WebKit       4%       4%   2
Safari · macOS                WebKit       3%       4%   2
Firefox · Windows             Gecko        1%       1%   2 (engine rule)
Other, each below 1%          mixed        3%       2%   3
  Chrome · macOS, Edge · macOS / Android / iOS,
  Firefox · macOS / Android / iOS

Tier rule: 10% or more of sessions or orders → 1; 2% up to 10% → 2; under 2% → 3

Try it: Pairwise Testing Generator

Common mistakes

  • Counting browser names instead of engines: Chrome, Edge and Opera on Windows are three browsers but one engine, and no WebKit browser has been tested.
  • Calling a page "tested on iPhone" after checking it in the DevTools device toolbar or a narrow desktop window.
  • Building the matrix from the team’s own devices instead of analytics, or never reviewing it.
  • Running the full regression suite on every combination instead of using tiers and pairwise selection.
  • Reporting "does not work on mobile" without browser, version, operating system and device, and without trying another browser on the same engine.
  • Using real customer data or personal accounts on shared cloud lab devices.

The QA perspective

The support matrix is agreed during test planning with the product owner, the developers and whoever owns the analytics. Ask early: which browsers does the contract promise? What should users of an unsupported browser see? Does a planned feature rely on new CSS or JavaScript that needs a compatibility check?

During execution, start each feature on Tier 1, then move on to Tiers 2 and 3. When something fails, reproduce it in a second browser with the same engine and in one with a different engine, so the report can say "WebKit only" or "every touch device". Record browser and version, engine, operating system, device model, language and account in the bug report, and the matrix version in the test completion report.

Practice exercise

Plan cross-browser coverage for a clinic booking site

Your task

A clinic booking site offers clinic visits and video consultations, in Arabic or English, to guests and signed-in users. Use the analytics below and the tier rule from the worked example to build its support matrix, combine the Tier 1 platforms with the other parameters by pairwise selection, and decide where each tier runs.

Material
Clinic booking site — last 90 days (illustrative numbers)

Browser · OS                  Sessions   Bookings
Chrome · Android                 41%        36%
Safari · iOS                     30%        33%
Chrome · Windows                 14%        17%
Edge · Windows                    6%         7%
Samsung Internet · Android        5%         3%
Firefox · Windows                 1%         1%
Other, each below 1%              3%         3%
Steps
  1. Add the engine to every row.
  2. Assign each row a tier, then apply the engine rule.
  3. Build a pairwise set: Tier 1 platform × language × account × booking type.
  4. Decide where each tier runs, and write your questions for the product owner.
Show the model answer
Model answer

Engines: Blink for Chrome on Android, Chrome on Windows, Edge and Samsung Internet; WebKit for Safari on iOS; Gecko for Firefox. Tier 1: Chrome · Android, Safari · iOS, Chrome · Windows. Tier 2: Edge · Windows, Samsung Internet · Android, and Firefox · Windows, raised by the engine rule because Firefox is the only Gecko browser. The rest stay in Tier 3.

Pairwise set, 6 runs instead of 24: (1) Chrome · Android, Arabic, guest, clinic; (2) Chrome · Android, English, signed in, video; (3) Safari · iOS, Arabic, signed in, video; (4) Safari · iOS, English, guest, clinic; (5) Chrome · Windows, Arabic, guest, video; (6) Chrome · Windows, English, signed in, clinic. A generator may return a different set of similar size.

Where: Tier 1 on real devices, because video consultations need a real camera, microphone and permission prompts. Tier 2: Edge and Firefox on a Windows computer, Samsung Internet on a real phone or in a cloud device lab with test accounts. Tier 3 before major releases.

Questions: Which browsers and oldest iOS and Android versions does the clinic promise to support? What does a patient on an unsupported browser see? Must video consultations work in every Tier 2 browser?

Frequently asked questions

Is cross-browser testing the same as compatibility testing?

Many teams use the two terms for the same thing. In ISO/IEC 25010:2023, however, compatibility means co-existence and interoperability with other systems, while working correctly in different hardware and software environments falls under adaptability, part of flexibility (called portability in the 2011 edition). Whatever the label, the test is the same: the same journeys, checked in the environments your users have.

Do I need to test old browser versions?

Test the versions your matrix supports. Chrome, Edge and Firefox update themselves every few weeks, so the current version covers most of their users; check your analytics for exceptions such as managed company computers. On iPhone the Safari version follows the iOS version, so include the oldest iOS version you support. Some teams also run beta versions of browsers to find problems before users do.

How do I find out which browser a bug reporter used?

Ask first, then read the User-Agent header of their request with care: nearly every browser starts it with Mozilla/5.0, Chromium browsers also mention Safari, Chrome on iOS adds CriOS, and the operating system version is often frozen or ambiguous: Chrome on Android reports Android 10; K whatever the real version and model, and Windows 11 still appears as Windows NT 10.0, like Windows 10. The User-Agent Parser splits the string into browser, engine, operating system and device type.

Can automation replace manual cross-browser checks?

Partly. Automated UI tests can run the same functional checks in Chromium, Firefox and WebKit on every build: Playwright runs its own builds of all three engines, and Selenium WebDriver drives installed browsers. But a WebKit build is not Safari itself, and a test checks only what it asserts; it will not notice a misaligned layout or an awkward touch target. Keep short manual or exploratory passes on Tiers 1 and 2, and some runs on real Safari.

References

Practise with Mutqan tools

Parse User-Agent strings into browser, version, engine, OS, device type and bot detection.

Web

Inspect the request headers your browser or client sends, with explanations for each.

API Testing

Generate high-level test scenarios covering functional, negative, security, usability and compatibility angles for a feature.

Test Design

Go deeper

Your progress on this topic

Part of the QA Roadmap