Appium 3.x实战:获取元素属性全解析

📅 2026/7/24 21:02:01
Appium 3.x实战:获取元素属性全解析
Appium 3.x 实战笔记扒光元素看个够 —— text、size、location、page_source 获取秘籍适配 Python Client 5.x前言在自动化测试中光会点击、输入还不够你总得知道找到的元素到底“长”什么样吧它显示了啥文字宽高多少藏在屏幕哪个旮旯甚至整个页面的 XML 结构是啥这篇笔记我就用Appium 3.x Appium-Python-Client 5.x的环境手把手带你获取元素的text、size、location以及全页面的page_source。老规矩雷电9安卓9实操验证代码复制即用配合全程风趣讲解保你一看就懂忘了还能当速查表。本文为个人原创学习笔记发布于 CSDN 仅作技术交流Appium 遵循 Apache 2.0 开源协议。一、这次我们要扒什么属性含义能干啥text元素上显示的文字断言页面内容是否正确size元素的宽和高单位像素验证控件尺寸、判断是否可点击location元素左上角的坐标{x, y}辅助坐标点击、滑动计算page_source当前页面的完整 XML 结构调试定位、快速查找层级关系一句话总结text 看字size 看块location 看位置page_source 看全家。二、核心语法新版必用fromappium.webdriver.common.appiumbyimportBy# 定位一个元素新版统一写法eldriver.find_element(By.XPATH,//*[textWLAN、移动网络、流量使用])# 扒信息print(el.text)# 输出元素文字print(el.size)# 输出字典 {height: 29, width: 296}print(el.location)# 输出字典 {x: 108, y: 236}# 打印整个页面的源码print(driver.page_source)老版本可能用过el.get_attribute(text)之类的但在 5.x 中直接用属性el.text最香简单又 Pythonic。三、完整示例代码复制即用importtimefromappiumimportwebdriverfromappium.options.commonimportAppiumOptionsfromappium.webdriver.common.appiumbyimportBy# 连接设置caps{platformName:Android,appium:platformVersion:9,appium:deviceName:25102RKBEC,# 你的设备名appium:automationName:UiAutomator2,appium:appPackage:com.android.settings,appium:appActivity:com.android.settings.Settings,appium:noReset:True,}optionsAppiumOptions()options.load_capabilities(caps)driverwebdriver.Remote(http://127.0.0.1:4723,optionsoptions)# 定位“网络和互联网”下面的小字“WLAN、移动网络、流量使用”eldriver.find_element(By.XPATH,//*[textWLAN、移动网络、流量使用])print( 扒开看看 )print(文字内容,el.text)print(尺寸大小,el.size)# 宽 x 高print(所在位置,el.location)# 左上角坐标print( 全家福 )print(driver.page_source)# 整个页面的 XML# 等待3秒关闭APPtime.sleep(3)driver.execute_script(mobile: terminateApp,{appId:com.android.settings})driver.quit()四、运行结果 解读笑点满满版1. 文字内容文字内容 WLAN、移动网络、流量使用妥妥的就是我们定位的那个辅助说明。如果打印出来是空字符串那多半是元素没有text属性比如ImageView、容器别慌。2. 尺寸大小尺寸大小 {height: 29, width: 296}单位是像素。这个元素高 29px宽 296px。知道了宽高我们就可以判断控件是否被遮挡或者变没变形。比如常见的“按钮居然只有 1px 高”那肯定是渲染飞了。3. 所在位置所在位置 {x: 108, y: 236}这个坐标是元素左上角距离屏幕左上角的位置。x108表示离左边缘 108pxy236离上边缘 236px。以后想用TouchAction去点某个元素的右下角那就用x width、y height算出来。4. page_source节选?xml version1.0 encodingUTF-8 standaloneyes ? hierarchy index0 classhierarchy rotation0 width1600 height900 android.widget.FrameLayout ... android.widget.LinearLayout ... ... android.widget.TextView textWLAN、移动网络、流量使用 resource-idandroid:id/summary bounds[108,236][404,265] ... / ... /android.widget.LinearLayout /android.widget.FrameLayout /hierarchy别被它吓到这其实就是 Appium 看到的 UI 树。你以后定位元素时写的 XPath就是在这棵树里玩捉迷藏。当你在 Inspector 里点来点去拿不到resource-id的时候把这个打印出来CtrlF一把梭爽不爽五、这些属性到底有什么用实战场景断言文字assert流量使用inel.text,难道我的流量偷偷跑了判断元素大小变化比如点开一个展开菜单前后size[height]从 50 变成 200说明展开了。自动截图时标记位置用location和size算出元素中心再配合PIL画个红框回归测试对比图一键生成。调试定位神器page_source定位不到元素时把源码存成.xml文件扔到浏览器里看层级或者直接复制节点文本写 XPath比 Inspector 还直观。六、新手避坑 幽默总结坑1text 为空如果你拿到的text是先看看元素是不是EditText或者ImageView它们压根就没有text属性。正确做法先去 Inspector 看一眼别逮着一个ImageView就问人家“你叫什么名字”。坑2size 和 location 单位别搞混单位是像素px不是 dp也不是你屏幕的物理尺寸。你可以在脚本里根据屏幕密度转换但绝大多数时候像素够用了。坑3page_source 爆炸输出像系统设置的页面 XML 还算克制你要是打开一个复杂 APP比如朋友圈那个page_source打印出来能让 PyCharm 卡半分钟。强烈建议只打印关键部分print(driver.page_source[:500])或者存文件再查。坑4老方法已凉driver.find_element_by_xpath()这种写了只会送你一个AttributeError必须用find_element(By.XPATH, ...)。看一百遍不如亲自踩一次踩了以后这篇笔记你就珍藏了。版权与参考说明本文为个人原创学习笔记所有代码与案例均为实操整理发布于 CSDN 仅作技术交流Appium 为开源自动化测试框架遵循 Apache 2.0 开源协议引用其官方规范仅作学习说明参考资料Appium 官方文档。