安卓UI自动化工具uiautomator项目实战前准备工作
一:环境准备
硬件设备:windows电脑
软件:pycharm/蓝叠或闪电模拟器/SDK manager
闪电模拟器下载链接:https://www.ldmnq.com/?n=6000&bd_vid=11623493887955105097
二:自动化脚本编写前需要掌握的基础python基础变量变量常用的数据类型(字符串/int/dict/list)的声明和调用,以及数据了类型间的转换函数(带参函数/不带参函数/有返回值/没有返回返回值)的声明与调用开源库的安装、调用判断语句与for循环2. 常用的adb命令
(1)查看已连接的设备列表:adb devices
(2)开启或关闭ADB服务:
开启:adb start-server
结束:adb kill-server
(3)连接设备:adb connect IP 断开设备:adb disconnect IP
如果是USB连接,直接会连接ADB,如果是想通过网络连接(有线或者无线),则需要在同一个局域网 ,通过设备的ip地址连接即可。
(4) 安装/卸载apk
安装apk adb install -r apk路径
常用参数说明:t 允许测试包 l 锁定该应用程序 s 把应用程序安装到sd卡上 g 为应用程序授予所有运行时的权限 r 替换已存在的应用程序,也就是说强制安装 d 允许进行将见状,也就是安装的比手机上带的版本低
卸载apk adb uninstall apk包名
(5)抓取日志 logcat
常用参数说明
"-s"选项 : 只显示指定标签的日志; ------>adb logcat -s SWVDEC 显示SWVDEC标签的日志
"-v"选项 : 设置日志的输出格式;----->adb logcat -v threadtime 查看日志输出时间和线程信息
"-c"选项 : 清空所有的日志缓存信息;---->adb logcat -c
"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;------->adb logcat -d
"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;------>adb logcat -t 5 输出日志缓冲区的最近5行获取cpu占用 :top
常用参数说明:
-m num Maximum number of processes to display. 最多显示多少个进程
-n num Updates to show before exiting. 刷新次数
-d num Seconds to wait between updates. 刷新间隔时间(默认5秒)
-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序
-t Show threads instead of processes. 显示线程信息而不是进程获取内存占用:dumpsys meminfo
获取指定应用的内存 dumpsys meminfo 包名获取应用进程号 ps
(9) 从手机中拉取信息到本地电脑上 adb pull <手机路径> <本机路径>
从本地电脑推送信息到手机上 adb push <本机路径> <手机路径>
(10) 获取当前运行的Activity
adb shell dumpsys activity | findstr/grep "mFocusedActivity"
(11) adb 截图命令: screencap 保存图片文件路径
(12) adb 录屏命令: screenrecord 保存视频文件路径(默认录制时间和最长录制时间都是 180 秒)
常用参数说明
--size WIDTH*HEIGHT 视频的尺寸,如1280*720,默认是屏幕分辨率
--bit-rate RATE 视频的比特率,默认4Mbps
--time-limit TIME 录制时长,单位:秒
三:自动化UI脚本编写流程
模拟器配置模拟器系统配置
性能设置选项设置为手机版/720*1280,如下图所示
机型设置都一致选择MI 9(个别机型可能存在兼容性bug,方便统一解决问题),如下图所示
其他设置中开启ROOT权限和ADB调试,如下图所示
然后"保存设置",会提示重启系统才会生效,重启系统后,在cmd窗口中,输入:adb devices,显示如下信息,证明连接成功。
然后安装我们要测试的apk安装uiautomator(用来做xpath值获取的工具)
(1)安装uiautomator2库
pip install --pre uiautomator2
pip install pillow (如果需要截图,可安装这个库)
(2)安装atx-agent
# init就是所有USB连接电脑的手机上都安装uiautomator2
python -m uiautomator2 init
# 指定手机安装uiautomator2, 用 --mirror
python -m uiautomator2 init --mirror --serial $SERIAL
# 嫌弃慢的话,可以用国内的镜像
python -m uiautomator2 init --mirror
最后提示success,代表atx-agent初始化成功。
(3)安装Weditor
pip install -U weditor
安装好之后,就可以在命令行运行 weditor --help 确认是否安装成功了。
Windows系统可以使用命令(weditor --shortcut)在桌面创建一个快捷方式,
如下图所示:
启动weditor的方式
方法1.命令行直接输入 weditor 会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可;
方法2.桌面上双击WEditor快捷方式即可;
方法3.命令行中执行 python -m weditor uiautomator常用API
参考教程https://vic.kim/2019/05/20/UIAutomator2%E7%9A%84%E4%BD%BF%E7%94%A8/
截至这里,各种环境已经安装完毕! 需求/用例熟悉
我们看2条注册模块的用例:
用例编号
模块
预置条件
操作步骤
期望结果
测试结果
1
注册
网络正常输入正确的账号和密码点击注册
2.弹出toast,提示注册成功,跳转到登录页面
2
注册
网络正常1.输入已经注册过的账号和密码
2.点击注册
2.弹出账号已经注册的toast提示
拆解操作步骤,结果判断等
操作步骤:打开app,点击注册按钮,然后定位到账号和密码文本框分别做出对应的操作
判断:注册成功后,弹出注册成功后,会跳转到登录页面,重复注册只是给出toast提示
以上是操作步骤和预期结果,在实际工作中,我们还需要在问题出现的时候,截屏或录屏 并给开发抓取log ,最好还要给出执行用例的时间 。
操作步骤如下
然后我们用代码实现如下图:import os import time import uiautomator2 as us #导入uiautomator2库 as是取个别名叫us #通过连接实例化拿到设备类 driver=us.connect_usb() #通过包名启动app #录制屏幕 os.system("start adb shell screenrecord --time-limit 60 /sdcard/test2.mp4 ") driver.app_start("com.example.wenhaotest")#引号内为包名称 time.sleep(5) #通过xpath定位到注册按钮并点击 #driver.xpath("//*[@resource-id="com.example.wenhaotest:id/btn1"]").click() driver.xpath("//*[@resource-id="com.example.wenhaotest:id/btn2"]").click() time.sleep(5) #当注册页面的某个xpath出现后,我们通过xpath定位到账号和密码并输入对应的内容,然后点击注册按钮 if driver.xpath("//*[@resource-id="com.example.wenhaotest:id/register_button"]").exists: #通过xpath定位到账号输入内容 driver.xpath("//*[@resource-id="com.example.wenhaotest:id/register_user"]").set_text("1kobe_brant2") #通过xpath定位到密码输入内容 driver.xpath("//*[@resource-id="com.example.wenhaotest:id/register_mm"]").set_text("8888888888") #通过xpath定位到注册按钮并点击 driver.xpath("//*[@resource-id="com.example.wenhaotest:id/register_button"]").click() #硬等待 #通过登录页面唯一xpath值定位,确认是否跳转,如登录页面有登录按钮 #通过对应函数获取app弹出的toast内容 textContent=driver.toast.get_message() print(textContent) # 硬等待 time.sleep(5) if(driver.xpath("//*[@resource-id="com.example.wenhaotest:id/btn1"]").exists and str(textContent) == "注册成功"): print("pass") # 抓取日志 os.system("adb logcat -t 100000 >> "C:UsersLENOVODesktoptest1.log" ") else: print("failed") #抓取日志 os.system("adb logcat -t 100000 >> "C:UsersLENOVODesktoptest1.log" ")
超级联赛男子组第一循环山西平遥古城3925安徽9月14日1300,2022中国手球超级联赛在滁州高教科创城文体中心手球馆展开第四比赛日的争夺,山西平遥古城男子手球俱乐部对阵安徽男子手球俱乐部,凭借着犀利的快速进攻,山西平遥古城
陈天桥一夜登上中国首富,捐70亿给美国,如今想回国发展遭拒绝大家好,我是渣渣辉。这句风靡网络的流行语出自网络游戏贪玩蓝月的广告,其前身是二十年前由盛大网络公司发布的传奇。该家公司的大老板名叫陈天桥,具有超强的商业头脑和投资眼光。他在投资传奇
哥谭骑士BOSS战实机演示小丑女哈莉奎因在哥谭骑士中,粉丝们敬爱的姥爷蝙蝠侠已经死去,而他的老对手小丑则不知所踪,官方也表示过小丑不会再本作现身。不过也不用沮丧,还是有老熟人登场的,并且还是辣妹哈莉奎茵。日前IGN带来了
肾好的男性,身上有哪些特征,看看你占了几个俗话说肾好不怕老。中医讲肾为生命之源,尤其对于男性来说,非常的重要。中医上讲,男子以八为七。什么意思呢?就是说男子到了四十岁,就开始出现了肾气不足肾精亏虚的表现了。如果你到了40以
你以为没事其实在自杀的十种行为一饭后吸烟烟草中含有几百种化学物质,其中60多种都与癌症相关,其中48。5的个体患癌死亡的原因可归咎于吸烟。二强忍眼泪眼泪可以把体内导致忧郁的化学物质清除掉,从而减轻压力,适当哭一
脂溢性脱发要不要经常洗头?会不会加重脱发?要不要经常洗头?很多脂溢性脱发的人群都有这样的疑问。洗头,掉更多不洗,头发油。相信很多小伙们都有这个焦虑,天天洗头的话担心照这个掉发速度,脑袋掉光光了咋办?我是脂溢性脱发,能每天洗
我的世界房屋改造挑战,我的世界交换空间综艺今日开播你的梦想之家是怎样的呢?我的世界惊喜限定房屋改造节目交换空间将于今日1500在哔哩哔哩抖音快手优酷和爱奇艺等平台重磅上线!两队明星开发者相互交换房子并按照对方的要求完成梦想之家的改
学会不要脸之后,生活立马变得有意思多了这个世界对什么样的人特别友好呢?不是有钱的人,也不是有权的人,而是脸皮厚的人。可能看到这很多人就不理解了,其实生活中很多案例已经告诉我们了,脸皮厚有时候真的是一种好处,比如前段时间
感念师恩人民教师无上光荣,习近平总书记这样点赞教师。短短八个字,浸润着总书记对默默奋战在三尺讲台上的教师们的敬重之情。一方书桌,三寸粉笔,一生光阴,四季流转。教师是青春梦想的奠基人,是播种
写给情深缘浅,爱而不得的人写给情深缘浅,爱而不得的人情深不能相守,爱你不能拥有,每次想念,都是如鲠在喉。写给,爱而不得的人,爱你情深似海,却不能与你携手人间,想你朝朝暮暮,却触摸不到你的笑脸。为你动心,爱你
云内动力(000903。SZ)拟聘任宋国富为总经理智通财经APP讯,云内动力(000903。SZ)发布公告,公司董事会于9月16日收到代云辉女士宋国富先生的书面辞职报告,因个人原因,代云辉女士申请辞去公司六届董事会董事董事会下设投