Supported Appium Versions on TestingBot
This page lists the Appium releases currently available on the TestingBot grid, the drivers installed with each, and the differences between Appium 1, 2 and 3. To pin a specific version in your tests, set the appiumVersion capability inside tb:options.
Appium 3
TestingBot supports Appium 3. See supported versions below to pin Appium 3 for your tests.
Appium 3 introduces a couple of breaking changes compared to Appium 2. The main changes are removal of legacy code and protocols, which were already marked as deprecated in Appium 2.
Breaking changes in Appium 3:
- Node.js and NPM minimum version bump (to 20.19 and 10) which is handled by TestingBot.
- Removal of certain deprecated endpoints.
- Security feature flag prefix requirements (for example replacing
adb_shellwithuiautomator2:adb_shell).
See the Appium 3 migration guide for the full list.
Appium 2
Appium 2 is the new version of Appium, the mobile automation framework to run tests against websites and mobile apps on phones and tablets (both simulators/emulators and physical devices).
The main difference between Appium 2 and Appium 1 is that Appium 2 uses the concept of plugins and drivers.
This makes for a better ecosystem, with cleaner code and improved flexibility and performance.
The drivers will add support for any given platform, for example an xcuitest driver will provide support for iOS XCUITest automation, an espresso driver for Android Espresso.
Plugins allow for adding and customizing existing behavior of Appium. Drivers and plugins can be easily shared, installed or removed from Appium 2.
Appium 2 supports iOS 14 and above and Android 6 and above.
Appium Versions
TestingBot currently supports these Appium versions:
| Appium version | Status | Installed drivers |
|---|---|---|
3.2.2 or latest
|
active |
These drivers are installed:
|
3.0.1 or latest-1
|
active |
These drivers are installed:
|
| 2.17.0 | active |
These drivers are installed:
|
| 2.11.3 | active |
These drivers are installed:
|
| 2.10.3 | December 1, 2025 |
These drivers are installed:
|
| 2.9.0 | November 1, 2025 |
These drivers are installed:
|
| 2.5.1 | October 1, 2025 |
These drivers are installed:
|
| 2.4.1 | September 1, 2025 |
These drivers are installed:
|
If you specify "appiumVersion": "latest", TestingBot will automatically use the latest Appium version. You can also use latest-1, latest-2, ... to test on the next most recent versions of Appium.
Appium 1 (legacy)
TestingBot keeps Appium 1 available as a legacy option for older test suites, currently at version 1.22.3. We recommend migrating new tests to Appium 3.
Appium 3 example on TestingBot
Appium 1, 2 and 3 are supported on TestingBot, on all our physical devices and virtual devices: iOS simulators and Android emulators.
These Appium drivers are installed on TestingBot:
These Appium plugins are pre-installed and can be activated by specifying a tb:appiumPlugins capability (by default empty):
{
'tb:appiumPlugins': ['images', 'execute-driver', 'universal-xml']
}
TestingBot defaults to the latest stable Appium release compatible with the device and OS version you request. Override it by specifying the appiumVersion capability inside tb:options.
The example below connects to the TestingBot device grid and pins Appium 3 (3.2.2) for a mobile automation test:
XCUITestOptions options = new XCUITestOptions();
options.setPlatformName("iOS");
options.setCapability("appium:platformVersion", "18.0");
options.setCapability("appium:deviceName", "iPhone 16");
HashMap<String, Object> tbOptions = new HashMap<>();
tbOptions.put("appiumVersion", "3.2.2");
options.setCapability("tb:options", tbOptions);
const capabilities = {
platformName: 'iOS',
'appium:platformVersion': '18.0',
'appium:deviceName': 'iPhone 16',
'appium:automationName': 'XCUITest',
'tb:options': {
appiumVersion: '3.2.2'
}
}
capabilities = {
"platformName" : "iOS",
"appium:platformVersion" : "18.0",
"appium:deviceName" : "iPhone 16",
"appium:automationName": "XCUITest",
"tb:options" : {
"appiumVersion" : "3.2.2"
}
}
capabilities = {
"platformName" => "iOS",
"appium:platformVersion" => "18.0",
"appium:deviceName" => "iPhone 16",
"appium:automationName" => "XCUITest",
"tb:options" => {
"appiumVersion" => "3.2.2"
}
}
AppiumOptions options = new AppiumOptions();
options.PlatformName = "iOS";
options.AddAdditionalAppiumOption("appium:platformVersion", "18.0");
options.AddAdditionalAppiumOption("appium:deviceName", "iPhone 16");
options.AddAdditionalAppiumOption("appium:automationName", "XCUITest");
var tbOptions = new Dictionary<string, object>();
tbOptions.Add("appiumVersion", "3.2.2");
options.AddAdditionalAppiumOption("tb:options", tbOptions);
Appium 2 Changes
If you've been using Appium 1 and want to try out Appium 2, then please be aware of the possible breaking changes listed below.
Protocol Changes
Appium 2 only allows the W3C WebDriver Protocol. Even though Appium 1 has supported this protocol since recent years, it also supported JSONWP (JSON Wire Protocol) and MJSONWP (Mobile Json Wire Protocol).
This means that if you are using an older Appium client or binding, you might have trouble communicating with Appium 2.
Instead of using desiredCapabilities, you now need to use capabilities with either alwaysMatch or firstMatch properties.
Capabilities
Appium only accepts a couple of standard W3C capabilities, including:
browserNamebrowserVersionplatformName
All other capabilities, such as app or deviceName need to be vendor-prefixed. A vendor prefix means you prefix each key with a string followed by a colon. In Appium's case, this would be appium:
An example of some of the capabilities you can use with Appium 2:
appium:appappium:deviceNameappium:noReset
automationName is required
With Appium 2, you now need to specify an automationName. Before, with Appium 1 this was filled in automatically if you did not specify it.
For iOS testing, you should use appium:automationName with XCUITest. For Android, you should set the appium:automationName capability to UiAutomator2.
TestingBot specific capabilities
You can specify TestingBot specific capabilities with the tb:options capability.
See below for an example where we will be using both Appium 2 and custom TestingBot capabilities.
XCUITestOptions options = new XCUITestOptions();
options.setPlatformName("iOS");
options.setCapability("appium:platformVersion", "18.0");
options.setCapability("appium:deviceName", "iPhone 16");
HashMap<String, Object> tbOptions = new HashMap<>();
tbOptions.put("appiumVersion", "3.2.2");
options.setCapability("tb:options", tbOptions);
Frequently asked questions
Which Appium version does TestingBot use by default?
TestingBot selects the latest stable Appium release compatible with the device, OS and OS version you request, biased toward Appium 3 for current iOS and Android versions. To pin a specific version, set the appiumVersion capability inside tb:options. Use latest, latest-1 or an explicit version number like 3.2.2.
How do I pin a specific Appium version for my test?
Add appiumVersion inside the tb:options capability map. For example, in WebdriverIO: 'tb:options': { appiumVersion: '3.2.2' }. See the code example below for Java, Node.js, Python, Ruby and C# snippets.
What is new in Appium 3 compared to Appium 2?
Appium 3 removes a number of deprecated endpoints, bumps the minimum Node.js and NPM versions (handled by TestingBot), and introduces a security feature flag prefix (for example adb_shell becomes uiautomator2:adb_shell). See the Appium 3 migration guide for the full list.
What is the difference between Appium 1 and Appium 2?
Appium 2 introduced the plugin and driver architecture, allowing platform support to be installed as separate drivers (xcuitest for iOS, uiautomator2 for Android, and so on). It also restricts the protocol to W3C WebDriver only, requires the appium: vendor prefix for non-standard capabilities, and requires automationName to be set explicitly. Appium 1 is kept as a legacy option for older test suites.
Is Appium 1 still supported on TestingBot?
Yes, Appium 1 is supported as a legacy option on the grid, currently at 1.22.3. We recommend migrating to Appium 3 for new tests because Appium 1 receives no upstream updates. To stay on Appium 1, pin appiumVersion: "1.22.3" in your tb:options.
Why is automationName required on Appium 2 and 3?
Appium 2 and 3 use a driver architecture where each platform driver registers a name. You must tell Appium which driver to use by setting the appium:automationName capability. For iOS use XCUITest; for Android use UiAutomator2; for Flutter use Flutter.
Can I use Appium 2 plugins on TestingBot?
Yes. Activate plugins per-test with the tb:appiumPlugins capability. The Images, Execute Driver and Universal XML plugins are pre-installed on the grid. For example: 'tb:appiumPlugins': ['images', 'execute-driver', 'universal-xml'].