Find the locator of a mobile application element
- Make sure Appium was installed by running the commands:
appium --version npm install appium-doctor -g appium-doctor -h
- Download and install Appium Inspector: Appium Inspector.Start Appium server by running:
appium --base-path /wd/hub
- Start Appium Inspector:
- Run this command before starting Appium Inspector:
xattr -cr "/Applications/Appium Inspector.app"
- Run Appium Inspector:
/Applications/Appium Inspector.app
- Start an Appium session:
Step 1: Fill in Remote Host, Remote Port and Remote Path for the Appium server.
- Step 2: Input device information to JSON representation. Here is the sample:
{ "appium:deviceName": "emulator-5554", "platformName": "Android", "appium:app": "/path/to/apkFiles/ApiDemos-debug.apk" }
Step 3: Select Start Session.
- After the app launched successfully, click the element and retrieve the locator value at Selected Element.
Here is a sample of custom keyword:
And here is an sample test case for your reference:package mypackage import org.openqa.selenium.remote.DesiredCapabilities import com.fasterxml.jackson.databind.ObjectMapper import com.kms.katalon.core.annotation.Keyword import io.appium.java_client.MobileElement import io.appium.java_client.android.AndroidDriver class MobileSupport { @Keyword static def getSession(String appiumEnpoint, String desizedCapabilitiesJson) { Map<String,Object> desizedCapabilities = new ObjectMapper().readValue(desizedCapabilitiesJson, HashMap.class) DesiredCapabilities caps = new DesiredCapabilities(desizedCapabilities) AndroidDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL(appiumEnpoint), caps) return driver } }
import org.openqa.selenium.By import org.testng.Assert import io.appium.java_client.MobileElement import io.appium.java_client.android.AndroidDriver import mypackage.MobileSupport String desCaps = """ { "appium:deviceName": "emulator-5554", "platformName": "Android", "appium:app": "/Users/johnsmith/Documents/apkFiles/ApiDemos-debug.apk" } """ "Open API Demos application" AndroidDriver<MobileElement> driver = MobileSupport.getSession("http://127.0.0.1:4723/wd/hub"", desCaps) "Verify that the tool bar title is API Demos" By toolBarTitle = By.xpath("/hierarchy/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.view.ViewGroup/android.widget.TextView") Assert.assertEquals(driver.findElement(toolBarTitle).getText(), "API Demos") "Click App" driver.findElementByAccessibilityId("App").click() "Click Search" driver.findElementByXPath("//android.widget.TextView[@content-desc='Search']").click() "Click Invoke Search" driver.findElementByAccessibilityId("Invoke Search").click() "Fill 'Prefill query'" String seachText = "ABC" driver.findElement(By.id("io.appium.android.apis:id/txt_query_prefill")).sendKeys(seachText) "Click 'onSearchRequest' button" driver.findElementByAccessibilityId("onSearchRequested()").click() "Verify content of the address bar" Assert.assertEquals(driver.findElement(By.id("android:id/search_src_text")).getText(), seachText)