Why Appium — The WebDriver of Mobile

8 min read

Before Appium, mobile test automation was a fragmented, expensive mess. Android had Robotium, then Espresso. iOS had UIAutomation, then Earl Grey. Each was platform-specific, each required you to write tests inside the app's own test target, and each demanded deep platform knowledge that most QA engineers didn't have. Appium changed the landscape by applying the same insight that made Selenium dominant on the web: a single, language-agnostic protocol that sits outside the app and drives it from the test layer.

The core idea: WebDriver for mobile

Selenium works because it standardised browser automation behind the W3C WebDriver protocol. Any programming language that can make HTTP requests can drive any browser that implements the protocol. Appium applied the exact same model to mobile.

Appium is a server that:

  1. Receives W3C WebDriver HTTP requests from your test code
  2. Translates them into native automation commands for the target platform
  3. Returns the results as WebDriver-format responses

Your test code does not know whether it is talking to a browser, an Android emulator, or an iPhone. It sends the same POST /session request it always did. Appium handles everything else.

Why this matters for you

Language freedom. Appium has official clients for Java, JavaScript, Python, Ruby, C#, and PHP. You pick the language your team already knows. This course uses Java, but the concepts transfer directly to any client.

No source code required. Unlike Espresso (Android) or XCTest (iOS), which run inside the app's test target and require access to its source code and build system, Appium tests run as a completely separate process. You only need the compiled app binary — an APK or IPA. This is essential for testing third-party apps or apps built by a separate team.

Reuse existing Selenium skills. If you can write driver.findElement(By.id("login")), you already know 80% of Appium. The driver API is identical. Waits, assertions, Page Object Model, TestNG integration — everything you learned from web automation applies.

Cross-platform test sharing. Because Appium abstracts the platform, you can write tests that run on both Android and iOS by changing only the capabilities. A shared base test class handles the common flow; platform-specific subclasses override what differs.

Appium's architecture

Your Java test
      ↓  HTTP (W3C WebDriver)
  Appium Server (Node.js)
      ↓              ↓
  UIAutomator2    XCUITest / WebDriverAgent
  (Android)       (iOS)
      ↓              ↓
  Android device  iOS device / Simulator

The Appium server is a Node.js process that you run locally or on a CI machine. It listens on port 4723 by default. Your Java test creates a driver by sending a POST /session request with a JSON capabilities object that describes the target device, platform, and app.

Appium then selects the appropriate driver plugin based on the automationName capability:

  • UiAutomator2 for Android native
  • XCUITest for iOS native
  • Espresso for Android (alternative, requires source access)
  • Safari or Chrome for mobile web

Appium 1 vs Appium 2

Appium 2, released in 2022, is a breaking change from version 1. The key differences:

TopicAppium 1Appium 2
DriversBundled with serverInstalled as plugins (appium driver install uiautomator2)
Server installnpm install -g appium installs everythingnpm install -g appium installs core only
Legacy commandsMany includedMost legacy touch APIs removed
Plugin systemNoneExtensible plugin architecture

All new projects should use Appium 2. If you encounter driver.swipe() or driver.zoom() in older code, those methods do not exist in Appium 2 — they were replaced with W3C Actions.

What Appium is NOT

Understanding the boundaries prevents wrong assumptions:

  • Not a test framework. Appium is an automation driver, not a test runner. You still need JUnit or TestNG for assertions, test lifecycle, and reporting.
  • Not a visual testing tool. Appium cannot compare screenshots for pixel-level regressions. You need a visual testing service (Applitools, Percy) for that.
  • Not a performance testing tool. Appium drives user interactions. Measuring frame rates, memory usage, or CPU requires platform profiling tools (Android Profiler, Instruments on iOS).
  • Not a security testing tool. Testing HTTPS certificate pinning, local storage encryption, or API security requires dedicated mobile security tools.

Appium vs the alternatives

ToolPlatformRequires source?Language
AppiumBothNoAny
EspressoAndroid onlyYesKotlin/Java
XCUITestiOS onlyYesSwift/Obj-C
DetoxReact NativeYesJavaScript
Flutter DriverFlutterYesDart

Appium is the right default for a QA team that needs cross-platform coverage, does not have access to the app's source code, and wants to reuse existing automation skills. Espresso and XCUITest are faster and more stable but only accessible to developers who own the codebase.

// tip to track lessons you complete and pick up where you left off across devices.