UiAutomator是Google提供的用来做安卓自动化测试的一个Java库.
Uiautomator工作流程
1.在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
2.在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
3.移动设备通过WiFi或USB接收到PC上发来的HTTP请求,执行指定的操作
一.前置工作(OPPO R11s手机)
打开开发者模式和USB调试模式
设置>关于手机>版本号(连续点击)>其他设置>开发者选项>USB调试
查看USB序列号
adb devices
二.ATX agent安装以及环境优化设置
2.1安装atx agent
pip install uiautomator2
# 对模拟器安装 ATX agent
python -m uiautomator2 init
# 查看atx-agent是否运行
adb shell
2.2atx agent环境优化设置
通过电源优化,关闭速冻,避免atx-agent退出
设置atx-agent自启动
三.App UI自动化元素定位工具weditor安装与使用
输入设备地址,点击Connect连接相应设备
pip install weditor==0.6.4
# weditor 启动
weditor
四.uiautomator2的基本操作
# -*- coding: utf-8 -*-
# @Time : 2022/12/6 20:24
# @Author : Cocktail_py
import uiautomator2 as u2
import uiautomator2 as u2
d = u2.connect_usb("6064dcb0")
# 通过收集wifi进行连接,需要查看手机的IP地址
# d = u2.connect_wifi("192.168.1.7")
# 通过adb wifi也就是adb tcpip模式,注意不要丢掉端口号
# adb tcpip 5555
# d = u2.connect_adb_wifi("192.168.1.7:5555")
class HandleKaoyanbang(object):
def __init__(self,serial="6064dcb0"):
# 当前是通过usb的方法来连接移动设备的
self.d = u2.connect_usb(serial=serial)
self.size = self.get_windowsize()
self.handle_watcher()
def handle_watcher(self):
"""定义一个监控器"""
# 监控器会单独的起一个线程
# 用户隐私协议
self.d.watcher.when('//*[@resource-id="com.tal.kaoyan:id/tip_commit"]').click()
# 广告
self.d.watcher.when('//*[@resource-id="com.tal.kaoyan:id/tv_skip"]').click()
# 监控器写好好,要通过start方法来启动
self.d.watcher.start()
def get_windowsize(self):
"""滑动的时候,需要获取屏幕大小"""
return self.d.window_size()
def close_app(self):
"""执行完成之后的操作"""
# 监控器被关闭
self.d.watcher.stop()
# 停止考研帮app
self.d.app_stop("com.tal.kaoyan")
# 清理缓存
self.d.app_clear("com.tal.kaoyan")
def handle_kaoyanbang_app(self):
"""启动考研帮app,并实现自动化操作"""
# aapt这个工具
# 通过weditor
self.d.app_start(package_name="com.tal.kaoyan")
# 在点击之前需要判断是否有这个控件
# 点击密码登录
self.d(text="密码登录").click_exists(timeout=10)
# 输入用户名,文本控件,set_text这个方法来输入文字
self.d(resourceId="com.tal.kaoyan:id/login_email_edittext").set_text("123456")
# 输入密码
self.d(resourceId="com.tal.kaoyan:id/login_password_edittext").set_text("123456")
# 点击登录
# self.d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
self.d(text="登录").click()
# 获取研讯
# 判断是否进入界面
# 判断是否有研讯按钮
# 在10秒判断这个界面是否启动了
if self.d.wait_activity("com.tal.kaoyan.ui.activity.HomeTabActivity",timeout=10):
self.d(text="研讯").click_exists(timeout=10)
# 在中间由下向上滑动
# 获取屏幕的中心点,x轴
# 再获取y轴远方点,获取到y轴近点
x1 = int(self.size[0]*0.5)
y1 = int(self.size[1]*0.9) # y轴最下边
y2 = int(self.size[1]*0.15) # y轴上方
while True:
# 检测到吐司之后停止
# get toast,是安卓系统的一个信息提示操作
if self.d.toast.get_message(0) == "内容已经全部加载完了":
self.close_app()
return
# 从(x1,y1)滑动到(x1,y2)
self.d.swipe(x1,y1,x1,y2)
if __name__ == '__main__':
k = HandleKaoyanbang()
k.handle_kaoyanbang_app()