Locators in Appium

 


In Appium, we can use several locators to identify mobile elements in Android or iOS apps. These locators are similar to those in Selenium but are designed for mobile-specific contexts.



Common Appium Locators:

  • By.id – Resource-id of the element
  • By.className – UI class of the element
  • By.name (deprecated in latest versions) – Content-desc (for accessibility)
  • By.xpath – XPath expression
  • By.accessibilityId – Accessibility ID (Content-desc in Android)
  • By.androidUIAutomator – For Android-specific UI selectors
  • By.iOSNsPredicateString – For iOS-specific predicates
  • By.iOSClassChain – For iOS class chains



Calculator App Example (Android) in Java

Below is a sample Appium test script in Java using Eclipse IDE to automate basic addition (example: 2 + 3 = 5) in the Android calculator app.



Pre-requisites:

  • Appium server is running

  • Android Emulator/Device is connected

  • Appium Java Client added to the project (pom.xml if using Maven or .jar added manually)





Java Code (in Eclipse)


import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;

public class CalculatorTest {
    public static void main(String[] args) throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        
        // Device details
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "11"); // change as per your device
        caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
        
        // App details (default Android calculator)
        caps.setCapability("appPackage", "com.android.calculator2");
        caps.setCapability("appActivity", "com.android.calculator2.Calculator");

        // No reset
        caps.setCapability("noReset", true);
        
        // Initialize driver
        AndroidDriver<MobileElement> driver = new AndroidDriver<>(
            new URL("http://127.0.0.1:4723/wd/hub"), caps);

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // Locating buttons by ID
        driver.findElementById("com.android.calculator2:id/digit_2").click();
        driver.findElementByAccessibilityId("plus").click(); // or driver.findElementById("com.android.calculator2:id/op_add")
        driver.findElementById("com.android.calculator2:id/digit_3").click();
        driver.findElementById("com.android.calculator2:id/eq").click();

        // Get result
        MobileElement result = driver.findElementById("com.android.calculator2:id/result");
        System.out.println("Result of 2 + 3 = " + result.getText());

        driver.quit();
    }
}



Maven Dependency:


<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>8.5.1</version> <!-- use latest -->
</dependency>