SoftwareTestPilot
Automation TestingPublished: 13 min read

Appium 2.0 Mobile Testing — Complete Guide (2026)

From zero to green iOS + Android test in one afternoon. Appium 2.0 driver install, real vs emulator strategy, cloud runners (BrowserStack, Sauce, LambdaTest) compared, and a WebdriverIO test suite.

Avinash K
Founder & QA Engineer at SoftwareTestPilot
Share:XLinkedInWhatsApp
Appium 2.0 mobile testing setup for iOS and Android.
Appium 2.0 mobile testing setup for iOS and Android.

Last updated 2026-07-20 · 13 min read · By Avinash K

Appium 2.0 unbundled drivers — you now install XCUITest, UiAutomator2, and Espresso separately via a driver CLI. That is a breaking change from 1.x and the #1 reason tutorials online are broken. This guide is current for Appium 2.4 and WebdriverIO 8.

Key takeaways

  • Appium 2.0 install and driver setup (macOS + Linux).
  • Real device vs emulator decision matrix.
  • Cloud runner comparison (BrowserStack, Sauce, LambdaTest).
  • A WebdriverIO end-to-end test.

1. Install Appium 2.0

npm install -g appium@next
appium driver install xcuitest
appium driver install uiautomator2
appium --version   # should be 2.x
appium             # starts server on 4723

2. Real vs emulator

Use caseReal deviceEmulator
Layout / smokeOptionalOK
Push notificationsRequiredFails
Camera / biometricsRequiredStubbed only
PerformanceRequiredMisleading
Battery / thermalRequiredN/A

3. Cloud runners

BrowserStack App Automate — best device catalog, priciest. Sauce Labs — best CI integration, enterprise-friendly. LambdaTest — cheapest, catalog smaller but growing. Aim for 3-4 real devices covering ~85% of your MAU device split (usually latest iPhone + iOS-2, latest Pixel + Samsung mid-tier).

4. WebdriverIO end-to-end

// wdio.conf.ts
capabilities: [{
  platformName: 'iOS',
  'appium:automationName': 'XCUITest',
  'appium:deviceName': 'iPhone 15',
  'appium:platformVersion': '17.4',
  'appium:app': '/path/to/app.ipa',
}]

// test.spec.ts
it('logs in', async () => {
  await $('~email-field').setValue('user@test.io');
  await $('~password-field').setValue('secret');
  await $('~login-button').click();
  await expect($('~home-header')).toBeDisplayed();
});

~ targets by accessibility ID — the most stable locator across iOS + Android. Reference: appium.io/docs. Related: Selenium locators cheat sheet, flaky tests.

Frequently asked questions

1.Appium or Detox for React Native?
Detox for RN-only shops (faster, in-process). Appium if you need one framework across native, RN, and hybrid.
2.How do I run iOS tests without a Mac?
Use a cloud runner (Sauce, BrowserStack). Local iOS testing requires macOS + Xcode.
3.Accessibility ID vs XPath?
Always accessibility ID first — it is stable across OS versions. XPath breaks on every UI refactor.
4.Parallel execution on real devices?
Cloud runners give you concurrency slots. Local parallel requires multiple physical devices + one Appium server per device.