Documentation
Appium Cloud Testing
Appium is the open-source W3C WebDriver framework for native, hybrid and mobile-web applications. TestingBot runs Appium tests on real iPhones, iPads and Android devices in our EU datacenter, alongside iOS simulators and Android emulators for fast iteration. Bring your existing Appium tests in Java, Python, Node.js, Ruby, C#, PHP or Robot Framework and point them at the TestingBot grid.
Quick start: run your first Appium test
Four steps to point an existing Appium test at the TestingBot cloud:
- Sign up and grab your API key. Create a free account. Your API key and secret are in the dashboard under Account, then Keys and Authentication.
-
Upload your app binary to TestingBot Storage. Upload your
.ipa(iOS) or.apk(Android) to TestingBot Storage. The response returns atb://URL you reference as theappium:appcapability. -
Point Appium at the TestingBot endpoint. Connect your Appium client to
https://hub.testingbot.com/wd/hub. SetplatformName,appium:deviceName,appium:platformVersionandappium:app(thetb://URL). Pass your key and secret viatb:options. - Run the test and view results. TestingBot streams a live video, screenshots, device logs and Appium command logs into the dashboard while the test runs and after it finishes.
Pick a language or framework
Each card below links to a complete setup guide for that language or framework, including a working example, capability reference and CI integration.
Node.js
Appium with the Node.js Appium or WebdriverIO clients.
C# / .NET
Appium with the C# Appium client. NUnit, Reqnroll and SpecFlow friendly.
Preparing your app
Before uploading, make sure your .ipa or .apk is built for testing (not release-signed for the App Store) so it can be installed on TestingBot devices. See preparing a mobile app for testing for the iOS provisioning profile and Android signing requirements.
Useful Appium capabilities
Appium exposes a comprehensive list of capabilities for configuring a test. The capabilities below are the ones we see come up most often:
Android-specific
-
appium:appActivityandappium:appPackage: by default Appium extracts the launch activity from your APK. Set these explicitly if extraction fails or if you want to start in a non-default activity. -
appium:chromeOptions: extra ChromeDriver options when testing the in-app Chromium web view. -
appium:otherApps: a JSON array of additional app URLs to install alongside the app under test (useful for testing share-targets or deep links to other apps).
Android and iOS
-
appium:locale: the language of the simulator or device (for examplefr_CA).This sets the locale on the entire device or simulator, except on real iOS devices. For real iOS devices, TestingBot passes
-AppleLocaleas a launch argument to the app instead. -
appium:newCommandTimeout: how many seconds Appium waits for a new command from the client before assuming the client quit and ending the session. -
appium:autoGrantPermissions(Android) orappium:autoAcceptAlerts(iOS): silently grant or accept permission popups so they do not block the test. See permission popups. -
realDevice: trueinsidetb:options: route the test to a physical iPhone, iPad or Android device instead of a simulator or emulator.
Frequently asked questions
What is Appium and what is it used for?
Appium is an open-source cross-platform test framework for native, hybrid and mobile-web applications. It implements the W3C WebDriver protocol so you can use the same client library to drive iOS and Android apps from Java, Python, Node.js, Ruby, C#, PHP and other languages. TestingBot runs Appium on a cloud grid of real devices and simulators so you do not have to maintain local Appium servers.
Which languages and frameworks does Appium support on TestingBot?
All Appium client libraries work against the TestingBot grid: Java, Python, Node.js (including WebdriverIO and CodeceptJS), Ruby, C# (including NUnit, Reqnroll and SpecFlow), PHP and Robot Framework.
Can I run Appium tests on real iPhones and real Android devices?
Yes. TestingBot runs Appium tests on physical iPhones, iPads and Android phones and tablets housed in our EU datacenter, alongside iOS simulators and Android emulators. Use realDevice: true in your capabilities to target real hardware. See real device testing for the full real-hardware overview.
How do I upload my app binary for Appium tests?
Upload your .ipa or .apk to TestingBot Storage with your API key and secret. The response returns a tb:// URL that you pass as the appium:app capability in your test. See uploading apps for Appium for details.
Which Appium version does TestingBot run?
TestingBot automatically selects the latest Appium 2 release compatible with the device, OS and OS version you request. Pin a specific version with the appiumVersion capability if you need an exact release. The full list of supported versions is on the Appium versions page.
Can I test the mobile web (Safari, Chrome) with Appium on TestingBot?
Yes. Set browserName to safari (iOS) or chrome (Android) and omit the app capability. See mobile browser testing for the full setup.
How do I handle permission popups, push notifications or app upgrades in Appium tests?
TestingBot supports the standard Appium capabilities for these flows: auto-grant or auto-accept permission popups, trigger and interact with push notifications, and test app upgrades by chaining installs of two binaries.
Can I run Appium tests behind a firewall or against a staging API?
Yes. Start the TestingBot Tunnel and pass tunnelIdentifier in your tb:options capabilities. The cloud device will route HTTP traffic through your tunnel so it can reach internal staging APIs and local development servers.
Next steps
- Capabilities builder
Generate ready-to-paste Appium capabilities - tb:options reference
All TestingBot-specific Appium options - Appium versions
Pin a specific Appium release - Uploading apps
.ipa and .apk uploads to TestingBot Storage - Permission popups
Auto-grant Android and iOS permission dialogs - Push notifications
Test FCM and APNs flows in your app - Supported devices
Real iPhones, iPads and Android devices - TestingBot Tunnel
Test against internal or staging APIs