1 u2自动化抓取工具介绍
1.1什么是Uiautomator
Uiautomator是Google提供的用来做安卓自动化测试的一个java库,基于Accessibility服务
辅助功能(AccessibilityService)是Android系统提供的一种服务,本身是继承Service类的,这个服务提供增强的用户界面,旨在帮助残障人士或者暂时无法与设备充分交互的人们
我们可以借助 AccessibilityService,可以实现对页面的监听及模拟点击控制等自动化操作
1.2 缺点
1 测试脚本只能使用java语言
2 测试脚本要打包成jar或者apk包上传到设备上才能运行。
1.3 Uiautomator2的诞生
希望能够用Python编写代码逻辑
希望能够在电脑上运行的时候就控制手机
在手机上运行了一个http rpc服务,将uiautomator中的功能继承进来,然后再将这些http接口封装成Python库
1.4 Uiaitomator2的优点
1 环境搭建便捷
2 UI空间识别有专业工具(weditor),可视化好
3 UI自动化编写采用Python,学习成本低
4 UI自动化脚本运行稳定
5 文档是中文的
1.5 Uiautomator2 项目地址
1.6 Uiautomator2支持的环境
1 Android本本 4.4+
2 Python 3.6+ (3.8.0 不支持,3.8.2可以)
1.7 开发环境
开发环境:windows10
运行环境:ubuntu 18.04
虚拟机:VMware® Workstation 15 Pro
SSH:SecureCrt Version 7.0.0(绿色软件安装包)
IDE:PyCharm 2019.3.2 (Profession Edition)
Python版本: Python3.6.9
1.8 开发环境注意事项
不要使用virtualbox虚拟机
2 u2通信流程介绍
2.1 通信流程
在项目初始化的时候,pc端会向移动设备通过Wifi或者usb或者adb wifi发送一些文件
这些文件会包含Uiautomator-server,Atx-agent,Minicap,,minitouch
这个时候在移动设备端Atx-agent会启动uiautomator的服务,默认端口号是7912
运行脚本,并向系统设备发送http请求
移动设备上运行并封装了uiautomator2 的http服务,解析受到的请求,并转化成uiautomator2 的代码
2.2 在启动项目之后
1 在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator服务(默认端口7912)进行监听
2 在pc上编写测试脚本并执行,(相当于发送http请求到移动设备的server端)
3 移动设备通过wifi或者usb接收到pc端发送来的http请求,执行制定的操作
2.3 请求流程
import uiautomator2 as u2
# 已经进行过初始化了,ip是手机在局域网中的地址
d = u2.conntec_wifi("192.168.18.200")
# 打开debug模式
d.debug = True
# 查看简单的设备信息
print(d.info)
"""
执行结果
curl -X post -d '{"jsonrpc":"2.0","id":"dasfasfessddfsf"}...'
curl是linux中发送请求的命令
请求方式是pose
请求的参数是一个json类型的参数
id是请求方法和当前时间戳的md5值
method:deviceInfo
"""
2.4 如何查看设备上的端口号
adb shell
ps | grep atx #查看进程
busybox netstat -pt | grep 7956 # 就可以看到端口号了
3 u2 自动化抓取开发环境搭建
资料下载 pan.baidu.com/s/10j7J6-6g…
提取码:i0w5
1 vmware Workstation
打开WMware Workstation --> 点击文件--> 点击打开 --> 找到Ubuntu 64 位.ovf这个文件,确定-->点击浏览-->新建文件夹D:\process\vm\ubuntu-->点击导入
如果导入过程失败,点击不再显示此消息,因为可能是目录中有中文字符的原因-->点击重试
如果ubuntu中wifi网络连接失败,就在本地计算机中打开--控制面板\网络和 Internet\网络连接
右击属性-->点击共享,都勾选上,选择家庭网络连接
如果还是连接不上网络,请查看这篇博文
2 secureCRT
安装就好
其余跟xshell一样
3 ubuntu中python环境的安装
# 先安装一个python环境,3.6.9
pip3 install virtualenv -i https://pypi.doubanio.com/simple
# 在一个目录中
python3 -m virtualenv venv
# 查看python环境的第三方包
pip3 freeze
# 使环境生效
source venv/bin/activate
# 要是发现virtualenv安装失败,就先卸载,然后
pip3 install virtualenv==20.0.23 -i https://pypi.douban.com/simple
4 pycharm和ubuntu打通
在pycharm中编码,使用ubuntu的环境,代码自动同步到ubuntu环境中
步骤
File-->settings-->Project:项目名-->Python interpreter-->Python Interpreter最右边的小齿轮
点击add-->SSH Interpreter-->Existing server environment-->点击最右方三个点
然后点击Next
然后点击Finish
这一番操作之后,你在本地的任何编码操作就会在linu系统中同步的,就可以使用远程的python环境,代码也能同步到linux环境中了
5 adb
Android 调试桥(adb)
adb client:命令行程序 “adb” 用于从shell或脚本中运行adb命令
adb server: ADB Server 是运行在pc上的一个后台进程
adbd:程序 “adbd”作为一个后台进程在Android设备或者模拟器系统中运行
adb能用来做什么
安装卸载apk
移动设备pc之间拷贝文件
查看设备上安装的应用信息
文件管理
按键操作
常见的adb应用
各种刷机工具
各种手机root工具
windows安装adb
首先在电脑上下载夜神模拟器,找到安装路径:D:\process\Nox\bin,添加到环境变量
点开夜神多开器,点击每一个模拟器的设置,将启动设置改成手机版
不建议使用的手机品牌
华为系列,荣耀系列
建议使用的手机品牌
小米,oppo等
对于手机的设置,打开设置,多次敲击版本号,出来之后点击开发者选项,打开usb调试
adb向模拟器中操作
# 安装apk操作
adb install 计算机中需要安装apk的全路径
# 查看所有安装软件
adb shell pm list packages
# 卸载apk
adb uninstall com.tal.kaoyan # 第三个参数就是查看所有软件中的一个,这里卸载了考研帮
ubuntu中安装adb
将上面文件拷贝到linux系统之后
sudo cp adb /usr/local/sbin/
sudo cp fastboot /usr/local/sbin/
sudo unzip -d /usr/local/sbin/ platform-tools_r29.0.6-linux.zip
# 加可执行权限
sudo chmod +x /usr/local/sbin/platform-tools/adb /usr/local/sbin/adb
sudo chmod +x /usr/local/sbin/platform-tools/fastboot /usr/local/sbin/fastboot
# 添加环境变量
sudo vim /etc/profile
在文件底部输入
export PATH=/usr/local/sbin:$PATH
如何在ubuntu中链接windows中的移动设备呢
adb devices
# 将链接方式改成tcp链接的方式,方便ubuntu系统连接
adb tcpip 5555
打开夜神模拟器,点击设置,点击手机与网络,手机型号最好设置为oppo的,勾选开启网络桥接模式
如果设置失败就重新设置就好
如果模拟器的wifi一直连不上,就参考下面连接,换网络并删除驱动
最后实在好不了就使用手机的wifi进行连接,但是连接之前,一定要将更改适配器选项中将其他连接方式的属性中的VirtualBox NDiS6删除掉
我们在ubuntu中输入
adb connection 192.168.3.135
当我们再次输入adb devices的时候就能看到我们的设备了
再来安装apk
abd install kaoyanbang_3.5.6.272.apk
# 然后来查看所有包
adb shell pm list packages
# 卸载包
adb uninstall com.tal.kaoyan
6 连接真实移动设备并安装apk-windows环境
插上手机,安装驱动,打开开发者模式,点开usb调试
!(E:\IMOOC\img\14.png)
在真实的移动设备中安装apk
adb install apk路径
要是在安装过程中失败,就点击开发者选项中的撤销USB调试授权,然后重新连接手机,安装驱动
在真实的移动设备中卸载apk
adb shell pm list packages
adb uninstall com.tal.kaoyan
7 在ununtu系统中链接真实移动设备
连接上手机之后,选择连接到虚拟机
在虚拟机中可以看到设备
然后再我们的命令行中就可以看见我们的设备
ubuntu系统向真实移动设备中安装apk
adb install kaoyanbang.apk
# 卸载apk
adn uninstall com.tal.kaoyan
4 u2项目初始化
如何安装u2自动化项目包以及如何控制我们的移动设备
pip install uiautomator2 -i https://pypi.doubanio.com/simple
对移动设备进行初始化,其实就是在移动设备中安装agent
python -m uiautomator2 init
我的华为手机在虚拟机中使用上述命令会报错,所以在我的本地运行就成功了
5 u2连接移动设备的三种方式
通过手机wifi连接
当前网络环境是在局域网中
import uiautomator2 as u2
d = u2.connect_wifi('192.168.1.7')
print(d.info)
通过usb连接
# 连接的时候参数是在命令行界面中输入adb devices出现的手机序列号
import uiautomator2 as u2
d = u2.connect_usb("XMKDU19403004799")
print(d.info)
通过adb_wifi连接
也就是adb tcp 的ip模式,注意要丢掉端口叫
首先在命令行中输入
adb tcpip 5555
然后再代码中输入
import uiautomator2 as u2
d = u2.connect_adb_wifi('192.168.1.7:5555')
print(d.info)
获取详细的设备信息
d.device_info
启动手机上的app
首先,获取app的包名
在夜神模拟器的安装目录中,有一个aapt.exe的文件
在该文件目录中启动cmd,执行
aapt dump badging apk的路径
执行完之后就可看到package: name="com.ss.android.ugc.aweme"
将name后面的值获取出来
启动app
# 开启
a.app_start('com.ss.android.ugc.aweme')
# 运行
time.sleep(5)
# 退出
d.app_stop('com.ss.android.ugc.aweme')
在ubuntu中安装aapt
sudo apt-get install aapt
我们在ubuntu中向手机中安装app的时候,如果出现Performing Streamed Install,只要在windows中安装即可
断开虚拟机的手机连接
虚拟机>可移动设备