使用uiautomator2自动化测试app(四)------实战篇2

在做自动化测试的时候, 千万千万要多多的测试, 重要的事情说三遍!~~~~~~

1. 当使用d(resourceId)或者其他d(什么)找不到这个点或者找的点不太精准的时候, 可以使用className, 在下面的这部分可以找到

当你点击左侧代码栏的时候, 设备显示页面会显示出你所点的位置的对应位置, 会用框框标记起来.

然后, 找元素的时候就可以找网页元素一样(当然, 有些点可能不会显示, 属于正常现象)找到你想要的点的位置.

2. 有些时候我会经常使用app_start这个函数, 但是会对应用程序的安装包名会出现一些纠结这时候可以使用这个方法:

adb shell dumpsys window w |findstr \/ |findstr name=

先打开你想要获取包名的应用程序, 然后cmd中输入这句话即可

注意: 只允许连接一台设备

3. 关闭除什么之外的所有的app, 是个列表, 可以放多个!

d.app_stop_all(excludes=['com.github.shadowsocks'])

4. 在进行多次测试的时, 有时候输入框会输入不进去文字, 即使以前可以完美运行. 所以这个时候为了保证脚本的成功率我们需要考虑用adb shell命令去对输入框输入文字, 这个方法相对来说是非常稳定的.

import os
import subprocess

# 需要对输入框先进行聚焦或者点击
os.popen('adb shell input text hello')

建议访问adb shell 命令

5. 有些时候我们需要对元素的文本信息进行模糊查找, 应为它会发生一些变化, 但是主体的文字还是存在, 只是可能会多出一些描述. 所以这个时候用text="xxx"就不合适了!

推荐使用以下方法:

descriptionContains: 根据描述

textContains: 根据文本

以上这两个方法只需写入所获取信息的一部分即可, 一般输入的时主体部分

6. 如果你能看到这里,恭喜你!只要学会这个,基本以后写脚本就没有任何大的阻碍了。

对于一些app页面,按钮的文本,描述提取不出来,可以说不用坐标点的话,这个按钮根本无法获取并点击(参杂着的WebView),但又不想根据坐标点来进行点击。那么推荐使用还未推广的uiautomator2的ocr------文字识别。

import uiautomator2 as u2
import uiautomator2.ext.ocr as ocr


d = u2.connect()
ocr.API = "http://xxxxxx"
u2.plugin_register("ocr", ocr.OCR)
d.ext_ocr("按钮显示的文本").click()

注意:1. 这里需要将uiautomator2升级到最新版才能使用, 博主使用的版本是0.1.4.dev43

            2. 这里还需要一个api地址,应该是将页面截图,传到这个地址进行识别检测,随后返回一些数据,处理完之后,就能直接使用按钮显示的文本进行点击。

缺点:如果这个api地址不能用了,那就尴尬了,所以如果能尽量解决的就尽量解决,不能图省事。

<think>嗯,我现在要了解一下uiautomator2这个自动化测试工具。首先,我应该从基本概念开始,弄清楚它是什么,用来做什么的。可能是一个用于Android应用的UI自动化测试框架,因为名字里有uiautomator,而Android有原生的UI Automator工具。 然后,用户可能想知道uiautomator2和原生的有什么区别。原生的UI Automator是基于Java的,而uiautomator2可能做了一些改进或者简化。听说uiautomator2是用Python封装的,这样可以用Python写测试脚本,可能更方便。 接下来,需要了解uiautomator2的主要特点。比如支持不需要侵入应用代码,直接通过屏幕元素进行操作。可能还有元素定位的方式,比如通过id、text、description等属性定位控件。另外,是否支持手势操作,比如滑动、长按等,还有如何处理弹窗和动态加载的内容。 安装步骤可能涉及Python的包管理工具pip,安装命令大概是pip install uiautomator2。然后可能需要初始化一些设备连接,比如连接手机或者模拟器,需要开启USB调试模式。有没有相关的初始化命令,比如python -m uiautomator2 init,用来安装守护进程apk到设备上。 使用流程可能包括连接设备,获取设备对象,然后通过选择器定位元素,执行点击、输入等操作。可能还需要处理不同设备的适配,比如通过设备的序列号或者连接地址来指定设备。另外,是否支持图像识别或者OCR功能,这在处理一些难以定位的元素时很有用。 代码示例可能是一个简单的测试脚本,比如启动应用,点击按钮,输入文本,然后验证结果。需要注意元素定位的方法,比如d(text="Login").click(),这样的语法是否正确。还有异常处理,比如元素找不到时的超时设置,或者重试机制。 优势方面,可能包括跨版本兼容性好,支持Android 4.4及以上,或者使用Python的简洁语法提高开发效率。劣势可能是不支持iOS,仅限于Android平台,或者某些复杂手势操作需要额外处理。 常见问题可能涉及连接问题,比如设备未被识别,需要检查ADB驱动或者USB调试是否开启。元素定位失败时如何处理,可能需要使用XPath或其他选择器,或者等待元素出现。还有性能问题,比如执行速度较慢,或者资源占用较高。 学习资源方面,可能有官方文档、GitHub仓库、社区论坛或者博客教程。是否需要推荐具体的资源链接,或者示例项目供用户参考? 在回答时,需要确保结构清晰,分点说明,并且覆盖用户可能关心的各个方面。同时,检查是否有错误的信息,比如uiautomator2是否真的不需要应用源码,或者是否需要root权限。可能还需要提到与Appium的区别,比如更轻量级,或者更适合Python开发者。 总之,我需要系统地整理uiautomator2的定义、特点、安装步骤、基本用法、优缺点、常见问题及解决方案,以及学习资源,确保信息准确且易于理解。</think>### **uiautomator2 自动化测试工具介绍** uiautomator2 是一个基于 Python 的 Android UI 自动化测试框架,封装了 Android 原生 `UIAutomator` 接口,简化了脚本编写流程,适合用于移动应用的 UI 功能测试。 --- #### **1. 核心特点** - **无需侵入代码**:无需修改被测应用源码,直接操作屏幕元素。 - **跨版本支持**:兼容 Android 4.4+ 系统。 - **元素定位灵活**:支持通过 `ID`、`text`、`description`、`XPath` 等属性定位控件。 - **丰富操作支持**:点击、滑动、长按、输入文本、截图等基础操作,并可扩展复杂手势。 - **Python 语法友好**:利用 Python 简洁语法快速编写测试脚本。 --- #### **2. 安装与初始化** **步骤 1:安装 Python 包** ```bash pip install uiautomator2 ``` **步骤 2:设备初始化** 连接 Android 设备(需开启 USB 调试),执行以下命令安装守护进程: ```bash python -m uiautomator2 init ``` --- #### **3. 基础用法示例** ```python import uiautomator2 as u2 # 连接设备(通过设备序列号或IP) d = u2.connect("设备序列号") # 或 u2.connect("192.168.1.100:5555") # 启动应用 d.app_start("com.example.app") # 定位元素并操作 d(text="登录").click() # 点击登录按钮 d(className="EditText").set_text("user123") # 输入文本 # 滑动操作 d.swipe(500, 1500, 500, 500, 0.5) # 向上滑动 # 断言元素是否存在 assert d(text="欢迎回来").exists(timeout=10) ``` --- #### **4. 核心优势与劣势** | **优势** | **劣势** | |-----------------------------------|-----------------------------------| | 1. 直接操作 UI,无需源码或 Root 权限 | 1. 仅支持 Android 平台 | | 2. 语法简洁,Python 开发者友好 | 2. 复杂场景需结合其他工具(如 OpenCV 图像识别) | | 3. 性能优于 Appium(轻量级) | 3. 动态元素需手动处理等待逻辑 | --- #### **5. 常见问题与解决** - **设备连接失败** - 检查 USB 调试是否开启,或使用 `adb devices` 验证设备识别。 - 无线连接需执行 `adb tcpip 5555` 并确保同一网络。 - **元素定位超时** - 增加等待时间:`d(text="按钮").exists(timeout=10)` - 使用 `XPath` 或 `child` 选择器精确定位层级。 - **动态加载内容处理** - 结合 `Watcher` 监控弹窗或动态元素。 --- #### **6. 学习资源推荐** 1. **官方文档**:[GitHub - openatx/uiautomator2](https://github.com/openatx/uiautomator2) 2. **实战教程**:优快云、掘金等平台的自动化测试专栏。 3. **扩展工具**:`weditor`(可视化元素定位工具): ```bash pip install weditor python -m weditor ``` --- **总结**:uiautomator2 适合快速实现 Android 应用的 UI 自动化测试,尤其适合 Python 开发者。需结合场景灵活处理动态元素和复杂操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她最爱橘了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值