Locator Strategies

Appium supports multiple strategies depending on the platform.

Cross-platform (preferred)

java
// Accessibility ID — works on both Android and iOS
driver.findElement(AppiumBy.accessibilityId("login-button")).click();

// XPath (slow but universal)
driver.findElement(AppiumBy.xpath("//android.widget.Button[@text='Login']")).click();

Android-specific

java
// UiAutomator (fast, Android only)
driver.findElement(AppiumBy.androidUIAutomator(
    "new UiSelector().text("Login").className("android.widget.Button")"
)).click();

// resourceId (like findById in Espresso)
driver.findElement(AppiumBy.id("com.example.app:id/btn_login")).click();

iOS-specific

java
// iOS Predicate String (fast)
driver.findElement(AppiumBy.iOSNsPredicateString(
    "type == 'XCUIElementTypeButton' AND label == 'Login'"
)).click();

// iOS Class Chain
driver.findElement(AppiumBy.iOSClassChain(
    "**/XCUIElementTypeButton[`label == 'Login'`]"
)).click();