定位元素
掌握 Appium 元素定位工具的使用
熟练运用常用的元素定位方式
能精准定位 APP 上的各类元素
核心讲解
(1)定位工具:Appium InspectorAppium 官方的元素查看工具,连接手机后可以查看页面元素的所有属性,获取定位器。
使用步骤:
启动 Appium Server
打开 Inspector,配置连接参数
启动会话,就能看到页面元素树
点击元素,右侧显示所有属性
表格
定位方式 | 语法 | 说明 |
|---|---|---|
id |
| 对应 resource-id 属性,优先用 |
class |
| 对应 class 属性,一般是控件类型 |
accessibility_id |
| 对应 content-desc,无障碍属性 |
XPath |
| 最灵活,复杂场景用 |
UIAutomator |
| Android 原生定位,速度快 |
优先用 resource-id,唯一稳定
没有 id 用 content-desc
列表、复杂布局用 XPath
尽量不用 class,重复太多
用 XPath 按位置取:
//android.widget.TextView[2]按文本定位:
//*[@text='设置']组合条件:
//android.widget.Button[@text='确定']
代码示例
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
desired_caps = {
"platformName": "Android",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.android.settings",
"appActivity": ".Settings",
"noReset": True
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 1. id定位
search_btn = driver.find_element(AppiumBy.ID, "com.android.settings:id/search")
print("搜索按钮:", search_btn.get_attribute("text"))
# 2. 文本定位(XPath)
bluetooth = driver.find_element(AppiumBy.XPATH, "//*[@text='蓝牙']")
print("蓝牙选项:", bluetooth.text)
# 3. accessibility_id定位
# 对应content-desc属性
# ele = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "向上导航")
# 4. class定位
text_views = driver.find_elements(AppiumBy.CLASS_NAME, "android.widget.TextView")
print("文本控件数量:", len(text_views))
# 5. UIAutomator定位(Android专属)
ele = driver.find_element(
AppiumBy.ANDROID_UIAUTOMATOR,
'new UiSelector().text("显示")'
)
print("显示选项:", ele.text)
# 点击进入
ele.click()
time.sleep(2)
driver.quit()
常见误区
元素属性动态变化:很多 id、text 是动态的,每次进入都不一样
直接用 Web 的定位习惯:APP 没有 CSS 选择器,不要写 CSS
列表元素索引错误:XPath 索引从 1 开始,注意列表的层级
不等待元素加载:页面跳转要等元素加载,不然定位不到
课后练习
用 Appium Inspector 查看设置 APP 的元素属性
用至少 3 种方式定位 “WLAN” 选项并点击
定位设置页面的所有选项文本,打印出来

