河南郑州创建网站公司,视频推广联盟,app详情页设计,wordpress获取指定分类文章很早以前#xff0c;我用uiautomatorjava实践过Android APP自动化测试#xff0c;不过今天要提的不是uiautomator#xff0c;而是uiautomator2。听起来uiautomator2像是uiautomator的升级版#xff0c;但是这两款框架仅仅是名字上比较相似#xff0c;实际上没有任何关联。…很早以前我用uiautomatorjava实践过Android APP自动化测试不过今天要提的不是uiautomator而是uiautomator2。听起来uiautomator2像是uiautomator的升级版但是这两款框架仅仅是名字上比较相似实际上没有任何关联。
一、uiautomator/uiautomator2的前生今世
项目地址https://github.com/openatx/uiautomator2
1.官方文档介绍 2.梳理一下脉络
先有的谷歌uiautomator但是只支持java
后来一个名为hexiaocong的开发者基于uiautomator封装了python版本支持python代码运行
而受其启发uiautomator2作者开发了uiautomator2。所以它们的诞生顺序应该是uiautomator(谷歌版)--uiautomator(python版)--uiautomator2
3.三款框架对比 框架 支持语言 特点 uiautomator java 谷歌开源仅支持Android xiaocong/uiautomator python 开源仅支持Android uiautomator2 python 开源仅支持Android
二、uiautomator2简介
1.项目组成
uiautomator-server主服务
minicap实现实时屏幕投屏以及实时截图
minitouch用于精确实时控制设备
atx-agent运行在设备上的驻守程序go开发用于保活设备上相关的服务
weditor类似于uiautomatorviewer专门为本项目开发的辅助编辑器
2.工作原理 1各部分职责 Python编写脚本向移动设备发起http请求 移动设备运行了封装了uiautomator2的http服务解析python脚本发起的请求并转化成uiautomator2可识别的代码
2运行过程
移动设备上运行atx-agent守护进程随后atx-agent启动uiautomator2服务默认7912端口进行监听
在PC上编写python脚本并执行相当于发送 HTTP 请求到移动设备的 server 端
移动设备通过 WIFI 或 USB 接收到 PC 上发来的 HTTP 请求执行指定的操作从而操作移动设备
三、环境搭建
1.安装uiautomator2
pip install uiautomator2
pip install -U weditor # 安装weditor
2.初始化设备
python -m uiautomator2 init
初始化成功会出现如下提示 当PC或Linux服务器连接了多台adb device的情况下“python -m uiautomator2 init”默认初始化的是所有设备若指定设备初始化则需使用“--serial”参数
python -m uiautomator2 init --serial $SERIAL # $SERIAL为手机序列号可通过adb devices查看
3.init时都干了啥
执行“python -m uiautomator2 init”命令会自动往手机上安装一堆东西
app-uiautomator.apk
app-uiautomator-test.apk
atx-agent
minicap
minitouch
更多信息详见https://github.com/openatx/uiautomator2/wiki/Manual-Init 四、基础操作
1.连接设备
uiautomator2提供了3种连接方式
1通过WiFi连接
import uiautomator2 as u2
d u2.connect(10.0.0.1) # alias for u2.connect_wifi(10.0.0.1) print(d.info)
2通过USB连接
import uiautomator2 as u2
d u2.connect(123456f) # alias for u2.connect_usb(123456f) print(d.info)
3通过ADB WiFi连接
import uiautomator2 as u2
d u2.connect_adb_wifi(10.0.0.1:5555)
# 等同于 # Shell: adb connect 10.0.0.1:5555 # Python: u2.connect_usb(10.0.0.1:5555)
2.命令行工具
1截图
uiautomator2 screenshot test.jpg
2获取当前APP报名及Activity
uiautomator2 current
3卸载应用
uiautomator2 uninstall package-name # 卸载一个包 uiautomator2 uninstall package-name-1 package-name-2 # 卸载多个包 uiautomator2 uninstall --all # 全部卸载
4停止应用
$ uiautomator2 stop com.example.app # 停止一个app $ uiautomator2 stop --all # 停止所有的app
3.元素定位
1常见定位方式
ui2支持 android 中 UiSelector 类中的所有定位方式详细可以查看官网https://developer.android.com/reference/android/support/test/uiautomator/UiSelector以下仅列出几种常见的定位方式
2子元素定位及兄弟元素定位
① 子元素定位-child
#查找类名为android.widget.ListView下的Bluetooth元素 d(classNameandroid.widget.ListView).child(textBluetooth) # 下面这两种方式定位有点不准确不建议使用 d(classNameandroid.widget.ListView)\ .child_by_text(Bluetooth,allow_scroll_searchTrue) d(classNameandroid.widget.ListView).child_by_description(Bluetooth)
② 兄弟元素定位-sibiling
#查找与google同一级别类名为android.widget.ImageView的元素 d(textGoogle).sibling(classNameandroid.widget.ImageView) ③ 链式调用
d(classNameandroid.widget.ListView, resourceIdandroid:id/list) \ .child_by_text(Wi‑Fi, classNameandroid.widget.LinearLayout) \ .child(classNameandroid.widget.Switch) \ .click()
3相对定位
d(A).left(B),# 选择A左边的B d(A).right(B),# 选择A右边的B d(A).up(B), #选择A上边的B d(A).down(B),# 选择A下边的B #选择 WIFI 右边的开关按钮 d(textWi‑Fi).right(resourceIdandroid:id/widget_frame)
4 Xpath定位
Java uiautoamtor中默认不支持xpath这是属于ui2的扩展功能速度会相比其它定位方式慢一些。在xpath定位中ui2中的description 定位需要替换为content-descresourceId 需要替换为resource-id
# 只会返回一个元素如果找不到元素则会报XPathElementNotFoundError错误 # 如果找到多个元素默认会返回第0个 d.xpath(//*[resource-idcom.android.launcher3:id/icon])
# 如果返回的元素有多个需要使用all()方法返回列表 # 使用all方法当未找到元素时不会报错会返回一个空列表 d.xpath(//*[resource-idcom.android.launcher3:id/icon]).all()
4.元素常用API 用法示例
d(testSettings).exists
d.exists(textWi‑Fi,timeout5)
5.设备交互
1单击/双击
d(textSettings).click() # 单击 d.double_click(x, y) d.double_click(x, y, 0.1) # 双击默认时间间隔0.1s
2长按
d(textSettings).longclick() # 长按
3滑动
# left, right, up, down d(textSettings).swipe(up, steps20) # 元素向上滑动步长20 d(textSettings).swipe(down, steps20) # 元素向下滑动 d(textSettings).swipe(left, steps20) # 元素向左滑动 d(textSettings).swipe(right, steps20) # 元素向右滑动
4拖动
d(textSettings).drag_to(textClock, duration0.25) # 拖动到某个元素时长0.25秒 d(textSettings).drag_to(877,733) # 拖动到屏幕某个坐标点duration时长默认0.5秒
5双指操作元素放大/缩小
d(textSettings).pinch_in() # 缩小 d(textSettings).pinch_out() # 放大
6等待元素出现/消失
d(textSettings).wait(timeout3.0) # 等待元素出现 d(textSettings).wait_gone(timeout20) # 等待元素消失返回True False,timout默认为全局设置的等待时间
7屏幕滚动
# 垂直滚动到页面顶部/横向滚动到最左侧 d(scrollableTrue).scroll.toBeginning() d(scrollableTrue).scroll.horiz.toBeginning() # 垂直滚动到页面最底部/横向滚动到最右侧 d(scrollableTrue).scroll.toEnd( d(scrollableTrue).scroll.horiz.toEnd() # 垂直向后滚动到指定位置/横向向右滚动到指定位置 d(scrollableTrue).scroll.to(description指定位置) d(scrollableTrue).scroll.horiz.to(description指定位置) # 垂直向前滚动横向同理 d(scrollableTrue).scroll.forward() # 垂直向前滚动到指定位置横向同理 d(scrollableTrue).scroll.forward.to(description指定位置) # 滚动直到System元素出现 d(scrollableTrue).scroll.to(textSystem)
8文本框操作
d.send_keys(test) d.clear_text() # 清空输入框
9toast操作
# 获取toast,当没有找到toast消息时返回default内容 d.toast.get_message(timout5,defaultno toast) # 清空toast缓存 d.toast.reset()
10监控操作
# 移除ANR的监控 d.watcher.remove(ANR)
# 移除所有的监控 d.watcher.remove()
# 开始后台监控 d.watcher.start() d.watcher.start(2.0) # 默认监控间隔2.0s
# 强制运行所有监控 d.watcher.run()
# 停止监控 d.watcher.stop()
# 停止并移除所有的监控常用于初始化 d.watcher.reset() 更多api详见https://github.com/openatx/uiautomator2
五、weditor元素定位
1.启动weditor服务
python -m weditor 2.访问weditor
默认端口17310访问地址http://localhost:17310/手机连接PC确保已开启USB调试模式点击Connect连接设备当Connect图标变为绿色表示连接成功。 3.界面调试
weditor提供了所操作即所得式的元素定位方式当双击屏幕上的图标或按钮weditor界面右侧的Coding框会同步展现元素操作的代码同时手机界面也会相应同步切换页面。 最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你