【uiautomator2】 Android自动化测试框架

UiAutomator是Google提供的用来做安卓自动化测试的一个Java库.

【uiautomator2】 Android自动化测试框架_第1张图片

Uiautomator工作流程
1.在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
2.在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
3.移动设备通过WiFi或USB接收到PC上发来的HTTP请求,执行指定的操作

一.前置工作(OPPO R11s手机)

打开开发者模式和USB调试模式

设置>关于手机>版本号(连续点击)>其他设置>开发者选项>USB调试

【uiautomator2】 Android自动化测试框架_第2张图片
【uiautomator2】 Android自动化测试框架_第3张图片
查看USB序列号

adb devices

【uiautomator2】 Android自动化测试框架_第4张图片

二.ATX agent安装以及环境优化设置
2.1安装atx agent
pip install uiautomator2
# 对模拟器安装 ATX agent 
python -m uiautomator2 init
# 查看atx-agent是否运行
adb shell

【uiautomator2】 Android自动化测试框架_第5张图片

2.2atx agent环境优化设置

通过电源优化,关闭速冻,避免atx-agent退出
【uiautomator2】 Android自动化测试框架_第6张图片

【uiautomator2】 Android自动化测试框架_第7张图片
设置atx-agent自启动
【uiautomator2】 Android自动化测试框架_第8张图片
【uiautomator2】 Android自动化测试框架_第9张图片

三.App UI自动化元素定位工具weditor安装与使用

输入设备地址,点击Connect连接相应设备

pip install weditor==0.6.4
# weditor 启动
weditor

在这里插入图片描述
【uiautomator2】 Android自动化测试框架_第10张图片

四.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()

你可能感兴趣的:(uiautomation,android)