乐于分享
好东西不私藏

App控件定位和交互(十)

App控件定位和交互(十)

一、元素的常用交互方法(核心操作)

所有方法均基于「已定位到的元素对象(element)」调用,需先通过 ID/XPath/UIAutomator 等方式定位元素,再执行交互操作。
方法
语法
核心作用
适用场景
注意事项
点击
element.click()
模拟用户点击元素
按钮、复选框、列表项、链接等可点击控件
1. 元素需「可见 + 可用」(is_displayed()+is_enabled()为 True);2. 避免点击坐标偏移(优先用元素点击,而非坐标点击);3. 点击后建议加短暂等待(如time.sleep(1)),避免页面未加载完成
输入文本
element.send_keys("内容")
向可输入控件(如 EditText)输入文本
用户名 / 密码输入框、搜索框、备注框等
1. 输入前建议先执行clear()清除原有内容;2. 输入中文需配置 DC 参数:unicodeKeyboard=True+resetKeyboard=True;3. 部分 iOS 控件需用set_value()替代
设置值
element.set_value("appium")
直接设置元素的 value 属性(替代输入)
部分特殊输入控件(如 iOS 的 TextField、Android 自定义输入框)
1. 效果与send_keys()类似,但底层逻辑不同(set_value直接赋值,send_keys模拟键盘输入);2. 优先用send_keys(),兼容问题时用set_value()
清除内容
element.clear()
清空可输入控件的现有文本
输入前清除默认提示 / 原有内容
仅对EditText(Android)/TextField(iOS)等可编辑控件有效
检查可见性
element.is_displayed()
判断元素是否在屏幕上可见
验证控件是否加载完成、是否显示(如弹窗、提示语)
返回布尔值(True/False);注意:元素存在但被遮挡(如被弹窗覆盖)时,返回 False
检查可用性
element.is_enabled()
判断元素是否可用(是否灰显)
验证按钮是否可点击、输入框是否可编辑
返回布尔值;灰显按钮(如未勾选协议的 “登录” 按钮)返回 False
检查选中状态
element.is_selected()
判断元素是否被选中
复选框(CheckBox)、单选框(RadioButton)、开关(ToggleButton)
❗ 注意:原内容中笔误为is_enabled(),正确方法是is_selected();选中返回 True,未选中返回 False
获取属性值
element.get_attribute("属性名")
获取元素的任意属性值
读取控件的resource-id/text/content-desc/class等属性
1. Android/iOS 属性名不同(如下表);2. 可参考appium-uiautomator2-server源码(GetElementScreenshot.java)中attribute相关逻辑,确认支持的属性列表

补充:get_attribute() 常用属性名(Android/iOS 差异)

用途
Android 属性名
iOS 属性名
示例
获取资源 ID
resource-id name

/accessibilityId
element.get_attribute("resource-id")

 → 返回com.tencent.wework:id/e0y
获取文本
text label

/name
element.get_attribute("text")

 → 返回 “通讯录”
获取描述
content-desc label

/accessibilityId
element.get_attribute("content-desc")

 → 返回 “搜索按钮”
获取类名
class type element.get_attribute("class")

 → 返回android.widget.Button

二、元素的核心属性(信息获取)

通过元素属性可获取控件的文本、位置、尺寸等关键信息,用于验证控件状态、计算滑动坐标等。

1. 获取元素文本

语法:element.text

作用:读取控件显示的文本内容(等同于get_attribute(“text”))

示例:

# 定位“通讯录”按钮并获取文本el = driver.find_element_by_id("com.tencent.wework:id/e0y")print(el.text)  # 输出:通讯录

注意:无文本的控件(如纯图片按钮)返回空字符串。

2. 获取元素坐标

语法:element.location

作用:获取元素左上角的坐标(以屏幕左上角为原点)

返回值:字典格式{‘x’: 横坐标, ‘y’: 纵坐标}

示例:

loc = el.locationprint(loc)  # 输出:{'x'498'y'19}x = loc['x']  # 提取横坐标y = loc['y']  # 提取纵坐标

应用场景:结合滑动操作(如从元素坐标滑动到屏幕底部)。

3. 获取元素尺寸

语法:element.size

作用:获取元素的宽度和高度

返回值:字典格式{‘width’: 宽度, ‘height’: 高度}

示例:

size = el.sizeprint(size)  # 输出:{'width'500'height'22}width = size['width']  # 提取宽度height = size['height']  # 提取高度

应用场景:验证控件大小是否符合预期(如按钮宽度是否为 500px)。

三、实操示例(完整代码)

以下是结合「元素方法 + 属性」的实战代码,以 Android 雪球 APP 为例:
from appium import webdriverimport time# 配置Desired Capabilitydesired_caps = {    "platformName""Android",    "deviceName""127.0.0.1:7555",    "appPackage""com.xueqiu.android",    "appActivity"".view.WelcomeActivityAlias",    "noReset"True,    "unicodeKeyboard"True,  # 支持中文输入    "resetKeyboard"True}# 连接Appium Serverdriver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)driver.implicitly_wait(30)  # 隐式等待# 1. 定位搜索框并操作search_el = driver.find_element_by_id("com.xueqiu.android:id/tv_search")# 检查搜索框是否可见、可用print("搜索框是否可见:", search_el.is_displayed())  # 输出Trueprint("搜索框是否可用:", search_el.is_enabled())    # 输出True# 点击搜索框search_el.click()# 2. 定位输入框,输入内容input_el = driver.find_element_by_id("com.xueqiu.android:id/search_input_text")input_el.clear()  # 清空原有内容input_el.send_keys("Appium")  # 输入文本# 验证输入内容(通过get_attribute获取value)print("输入框内容:", input_el.get_attribute("text"))  # 输出:Appium# 3. 获取输入框的坐标和尺寸print("输入框坐标:", input_el.location)  # 输出如{'x': 100, 'y': 200}print("输入框尺寸:", input_el.size)      # 输出如{'width': 600, 'height': 80}# 4. 定位“搜索”按钮,检查是否可点击search_btn = driver.find_element_by_xpath("//*[@text='搜索']")if search_btn.is_enabled():    search_btn.click()    print("点击搜索按钮成功")time.sleep(3)driver.quit()  # 关闭APP

四、常见问题与避坑

send_keys()输入中文乱码:

解决:配置 DC 参数unicodeKeyboard=True+resetKeyboard=True。

is_selected()返回错误:

原因:误调用is_enabled(),需修正为is_selected()。

get_attribute()返回 None:

原因:属性名错误(如 Android 用label、iOS 用text),需匹配对应平台的属性名。

点击元素无响应:

排查:先验证is_displayed()和is_enabled()是否为 True,再检查元素是否被遮挡。

总结

核心交互方法:

点击(click())、输入(send_keys())、清除(clear())是高频操作,需确保元素「可见 + 可用」;

状态检查方法:

is_displayed()/is_enabled()/is_selected()用于验证控件状态,是脚本稳定性的关键;

属性获取:

text(文本)、location(坐标)、size(尺寸)是最常用的属性,get_attribute()可灵活读取任意控件属性;

平台差异:

get_attribute()的属性名在 Android/iOS 中需区分,输入操作优先用send_keys(),兼容问题时用set_value()。
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » App控件定位和交互(十)

猜你喜欢

  • 暂无文章