Join the webinar on 'Open source GenAI tools for Test Automation' on May 28th or May 30th.
Appium tutorial for iOS and Android app testing

A comprehensive guide for testing Android and iOS mobile apps with Appium

October 18, 2023
Shigeya TanabeShigeya Tanabe
Shigeya Tanabe

In today's landscape, numerous businesses and corporations thrive by relying on diverse mobile applications. Examples include WhatsApp, Snapchat, Facebook, Pokemon Go, and various mobile wallet services, all of which owe their functionality to rigorous testing methodologies.

Certain e-commerce mobile apps have also recognized the significance of crafting a robust testing strategy using mobile application methodologies. These apps have undergone comprehensive testing using a variety of mobile strategies to ensure their compatibility. Mobile apps empower both corporations and enterprises to create scalable applications accessible across multiple platforms.

The process of developing mobile application software entails thorough testing for functionality, usability, and consistency. This testing involves a combination of automation and manual testing techniques. Given the increasing complexity of mobile applications, there is a growing need for comprehensive end-to-end testing. This ensures that mobile apps are not only downloadable but also operate effectively, delivering a consistent experience to users across different devices.

The rising importance of Appium

As the demand for mobile apps is on a continuous surge, both corporations and enterprises are turning to Appium to create scalable apps accessible across multiple platforms. This shift is driven by the need to build mobile applications that not only meet user expectations but also operate effectively and consistently. 

Introducing Appium

Appium is an open-source automation tool widely used for testing mobile apps on Android and iOS platforms. It enables you to automate testing for native, hybrid, and mobile web applications. Appium uses a "write once, run anywhere" approach, meaning you can use the same codebase for testing apps on both iOS and Android devices.

What are the different types of mobile apps?

The three primary types of mobile applications are:

  • Native apps: These are built specifically for a particular platform, like Android or iOS, using platform-specific programming languages (Java/Kotlin for Android, Swift/Objective-C for iOS).
  • Hybrid apps: These combine elements of both native and web apps. They are often developed using web technologies (HTML, CSS, JavaScript) but are wrapped in a native container to run on mobile devices.
  • Web apps: These are mobile-optimized websites that can be accessed through a mobile browser.

Appium can automate testing for all three types of mobile apps.

Read: A Step-by-Step Guide to Test Automation with Appium

Appium testing: It’s prerequisites, requirements, and processes

Prerequisites for Appium Testing

Before you start using Appium, you'll need:

  • Java Development Kit (JDK): Install the JDK on your system.
  • Android SDK and iOS SDK: Install the Android SDK and iOS SDK and set up virtual devices or connect physical devices for testing.
  • Appium server: Download and install the Appium server on your machine.
  • Appium client libraries: Choose a programming language (e.g., Java) and install the corresponding Appium client library.
  • IDE: Utilize an integrated development environment (IDE) like Eclipse or IntelliJ IDEA for writing and executing Appium tests.

Appium Inspector 

Much like Selenium IDE's record and playback tool, Appium offers an 'Inspector' feature for recording and playback. This functionality allows you to record and replay native application interactions by examining the Document Object Model (DOM) and generating test scripts in your preferred programming language. It's important to note that, as of now, Appium Inspector lacks support for Microsoft Windows. On Windows, it can successfully launch the Appium Server but is unable to inspect elements. As an alternative, you can utilize the UIAutomator viewer for inspecting elements.

Here are the steps to begin using Appium Inspector on your Mac machine:

Step 1: Start by downloading and launching your Appium server. Make sure the server is configured with the default IP Address ( and port (4723).

Launching appium server

Step 2: Start the simulator on your Mac machine.

Step 3: Next, open Appium inspector and set ‘Desired Capabilities’ and click ‘Start Session’

start appium session

Step 4: Appium Inspector will display the element hierarchy in a column-wise structure, allowing you to view and interact with the elements. You can also perform actions using buttons like Tap, Swipe, and more.

element hierarchy

Step 5: You can start recording by clicking the ‘Start Recording’ button. When you're done recording or inspecting, simply click on the 'Stop' button to conclude the process.

start recording

Start Automating Android Apps Using Appium

Following is the basic procedure for Android app testing with Appium —

Step 1: Initialize Appium

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import org.openqa.selenium.remote.DesiredCapabilities;
public class AndroidTest {
    public static void main(String[] args) {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "Your_Device_Name");
        // Add other desired capabilities
        AppiumDriver<MobileElement> driver = new AndroidDriver<>("Appium_Server_URL", capabilities);

Step 2: Write test cases

Write test cases using Appium's methods to interact with elements in the Android app.

Locating Elements Using UIAutomatorViewer

UIAutomatorViewer is a tool provided by Android SDK to inspect and locate elements in Android apps. Use it to identify element locators for your Appium tests.

  1. Launch UIAutomatorViewer from the Android SDK's "tools" directory.
  2. Connect and prepare device: Ensure your Android device or emulator is running and connected with USB debugging enabled.
  3. Capture screenshot: Use UIAutomatorViewer to capture a screenshot of the app.
  4. Inspect elements: Hover over the screenshot to identify elements. Click on elements to view attributes like resource-id, class, text, etc.
  5. Identify element locators: Note down the relevant attributes to serve as element locators in your Appium scripts.
  6. Exit UIAutomatorViewer: Close UIAutomatorViewer when you have the necessary element locators.
  7. Use locators in Appium scripts: In your Appium test scripts, utilize the element locators to interact with app elements during testing.

Start Automating iOS Apps with Appium

Following is the basic procedure for iOS app testing with Appium—

1. Install Appium and dependencies:

Ensure you have Appium installed on your machine, following the installation process outlined in the previous sections.

2. Prepare iOS environment:

To automate iOS apps, you'll need a macOS computer. Appium iOS automation requires Xcode, which is only available on macOS.

Additionally, make sure you have the Xcode Command Line Tools installed.

3. iOS simulator or device:

You can automate iOS apps on either an iOS simulator or a physical iOS device. Ensure you have access to the device or simulator you want to use.

4. Start Appium server:

Launch the Appium server, as described earlier, specifying the server address and port in your Appium settings.

5. Define desired capabilities:

In your Appium test script, define the desired capabilities specific to iOS testing. These capabilities include information like the platform name, platform version, device name, and app path.

6. Set automation framework:

Appium uses XCUITest as the automation framework for iOS testing. Set the automationName capability to "XCUITest" to indicate that you're using this framework.

7. iOS App installation:

Specify the app you want to automate using the app capability. You can provide the app path or the bundle identifier of the app.

8. Initialize Appium driver:

In your test script, create an Appium driver instance for iOS by specifying the Appium server's URL and the desired capabilities you've defined.

9. Write test cases:

Develop your test cases using Appium's methods and functions to interact with iOS app elements. You can find elements using locators like XPaths or accessibility IDs.

10. Execute test cases:

Run your Appium test script to execute the automation. The script will launch the iOS app on the chosen device or simulator and perform the specified actions.

11. Analyze test results:

Appium provides detailed test logs and reports to help you analyze test results. You can identify any issues or failures in your test cases.

12. Debug and refine:

If any test cases fail or need improvement, debug and refine your scripts accordingly. This iterative process ensures the reliability and effectiveness of your automated tests.


  • No support for Windows apps: Appium primarily supports Android and iOS, so testing Windows apps is not possible.
  • Limited iOS simulator features: Some advanced iOS simulator features may not be accessible via Appium.
  • Native app limitations: Testing certain native app features, like biometric authentication, can be challenging.

First program for automating an app on Appium

For a complete example, let's automate a simple scenario - launching an app and verifying the app's title:

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import org.openqa.selenium.remote.DesiredCapabilities;
public class AppiumDemo {
    public static void main(String[] args) {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "Your_Device_Name");
        capabilities.setCapability("appPackage", "");
        capabilities.setCapability("appActivity", ".MainActivity");
        AppiumDriver<MobileElement> driver = new AndroidDriver<>("Appium_Server_URL", capabilities);
        // Automate your test steps here
        // e.g., driver.findElementByXPath("//element_locator").click();
        String appTitle = driver.findElementByXPath("//element_locator").getText();
        System.out.println("App Title: " + appTitle);

Replace "" and "Your_Device_Name" with your app's package name and your device's name.

Appium test for launching the eBay app

ebay app test
ebay app test

Common issues encountered and suggested troubleshooting tips

Error Troubleshooting tip
Appium server not starting
  • Ensure you have Appium and its dependencies correctly installed.
  • Check if there are any conflicting processes using the same port (usually 4723). Kill them if necessary.
  • Verify that your system meets the hardware and software requirements for running Appium.
Appium can't connect to the mobile device or emulator.
  • Confirm that the device or emulator is correctly connected to the computer via USB or configured for network connection.
  • Restart ADB server (Android Debug Bridge) if working with Android devices.
  • Ensure that USB debugging is enabled on Android devices.
  • For iOS, ensure the device is properly recognized in Xcode and enabled for development.
Appium cannot locate a specific element in the app.
  • Double-check the element locator (XPath, ID, etc.) used in your test script.
  • Verify that the element is visible and accessible at the time of the test.
  • Add waits or implicit/explicit waits to ensure the element loads before interacting with it.
The element that was located is no longer part of the DOM (Document Object Model).
  • Implement error-handling mechanisms like try-catch blocks to handle this exception.
  • Re-locate the element or refresh the page before interacting with it.
The app crashes or becomes unresponsive during test execution.
  • Check for memory issues or memory leaks in the app's code
  • Ensure your test script doesn't overload the app with rapid interactions.
  • Increase the device or emulator's available resources if possible.
Tests produce inconsistent results on different devices or emulators.
  • Standardize test environments by using the same app version, device configuration, and operating system
  • Implement synchronization points in your tests to ensure a consistent state before interacting with elements.

Conclusion: Using Appium with HeadSpin

Using Appium with HeadSpin for testing mobile apps provides you with a powerful combination of automation capabilities and a comprehensive mobile device testing platform. HeadSpin offers a cloud-based infrastructure that allows you to test your mobile apps on real devices and networks from various locations worldwide. 

If your team already has existing Appium tests, you can seamlessly integrate them with the HeadSpin Platform and execute them on any accessible device. Appium takes care of the functional aspects of the test, while HeadSpin's data and insights enhance the non-functional aspects.

In the latest platform version, you can now debug and develop Appium scripts directly in the UI without the need for a separate app or desktop client. Additionally, apart from the standard Appium capabilities and W3C WebDriver specifications, the Appium server on each HeadSpin host supports various custom capabilities. The HeadSpin Appium load balancer, running in the cloud, offers additional features for device selection and redundancy control.

Appium Inspector, a valuable component of Appium's feature set, is typically used to identify UI elements when creating Appium automation scripts. It typically works in conjunction with an actual device from your local machine or a simulator (for iOS) or emulator (for Android) to explore the app's view hierarchy.

However, HeadSpin’s Device Remote Control UI streamlines the setup process by eliminating the need to prepare simulators/emulators, download apps for testing, and perform various other setup steps. This feature is known as HeadSpin Appium Inspector Integration within the HeadSpin Device Remote Control UI.

HeadSpin’s impact

  • Testing with open-source Appium, avoiding vendor lock-in.
  • Accelerating test cycles by up to 30% with the HeadSpin Platform.
  • Capturing performance data to provide actionable insights.
  • Ensuring reliable testing on both iOS and Android devices.
  • Guaranteeing compatibility with two-way audio and biometric testing.

These innovations are designed to enhance your mobile testing and performance monitoring efficiency, making your testing processes more effective and robust.

Book demo.


Q1. What are the best practices for handling iOS app gestures, such as swiping and tapping, in Appium tests?

Ans: Appium provides methods for handling gestures, including swipe, tap, and pinch. Best practices involve using these methods to simulate user interactions accurately.

Q2. What is the Appium UI Testing Framework?

Ans: The Appium UI Testing Framework is an open-source, cross-platform automation tool designed for testing mobile applications' user interfaces (UIs). It allows testers and developers to automate the testing of mobile apps on various platforms, including Android and iOS.

A comprehensive guide for testing Android and iOS mobile apps with Appium

4 Parts


Perfect Digital Experiences with Data Science Capabilities

Utilize HeadSpin's advanced capabilities to proactively improve performance and launch apps with confidence
popup image