Uiautomator2自动化测试框架

一、安装Adb工具包

命令总览:

adb devices                           # 列出当前连接的设备sn号
adb kill-server                       # 停止服务
adb start-server                      # 启动服务
adb connect [ip:port]                 # 连接设备,port可以不指定
adb disconnect [ip:port]              # 断开设备
adb install -r [app安装包路径]          # 通过app安装包安装app
adb uninstall [app包名]                # 卸载app
adb shell pm list packages            # 列出手机安装的所有app的包名
adb shell pm list packages -s         # 列出系统应用的所有包名
adb shell pm list packages -3         # 列出除了系统应用的第三方应用包名
adb shell am force-stop [app包名]      # 强制停止应用
adb shell wm size                     # 查看屏幕分辨率
adb pull [手机路径] [本地PC路径]         # 将文件从手机上拉到电脑上
adb push [本地PC路径] [手机路径]         # 将文件从PC上推到手机上
adb shell ping [ip或者域名]             # adb ping命令
adb -s [sn号] shell ping [ip或者域名]   # 指定sn号的adb ping命令

下载adb工具包

浏览器输入这个链接下载 ADB工具包:https://dl.google.com/android/repository/platform-tools-latest-windows.zip

 添加adb环境变量

 

 检查adb是否安装成功

添加完成后,重新打开1个cmd窗口,检查adb的版本信息,判断adb是否安装成功。

adb --version

 

将手机通过USB线连接到电脑,开启手机的USB调试模式。

开启USB调试模式的方法

进入手机设置---关于手机,能看到手机的系统信息, 多次点击"版本号"(大概5~6次的样子),会提示 当前处于开发者模式。然后在"开发人员选项" --- "调试" --- "USB调试",将"USB调试"后面的按钮打开。

打开后手机会收到一个"是否允许USB调试"的提示信息, 勾选"始终允许使用这台计算机进行调试", 点击"确定"。

另外将锁屏密码关闭,显示里的"休眠"设置为永不。

 

 

执行adb命令检查连接的Android设备sn号

adb devices

注: 如果提示"adb server version (31) doesn't match this client (41); killing...",有可能是adb默认端口5037被占用了。可以尝试按照如下方法解决问题:

netstat -ano|findstr 5037

tasklist | findstr [进程ID]

 

 打开任务管理器,关闭对应的进程。

检查是否还有其他进程占用5037端口:

 

 再次执行"adb devices"命令查询连接的设备的sn号。

关闭adb服务:adb kill-server

启动adb服务: adb start-server

 

二、安装Scrcpy投屏工具

进入这个链接下载:https://github.com/Genymobile/scrcpy/releases, 下载scrcpy压缩包,下载完成后,解压缩。

 

 

 这个时候就能在PC上看到手机的屏幕投屏了。为了打开方便,可以为scrcpy.exe创建快捷方式。

三、安装Uiautomator2

安装uiautomator2

pip install uiautomator2

 

 

 

 安装weditor

pip install weditor

检查uiautomator2和weditor版本

pip list

初始化adb设备,这个时候会在手机上安装一个ATX应用。

python -m uiautomator2 init

 

 

 

执行完命令后,手机上会安装1个ATX应用,外形看起来像个小黄车。点击小黄车,点击"启动UIAUTOMATOR"。

如果提示"UIAutomator not starting",如截图所示。则可以通过adb shell启动。

 

通过adb shell启动手机上的ATX服务。操作如下:

adb shell

chmod 775 /data/local/tmp/atx-agent

/data/local/tmp/atx-agent server -d

 

 

 

 

 

 

 四、Uiautoamtor2连接手机的2种方式

uiautomator2连接手机有2种方式:

USB连接和wifi连接

USB连接:主要是通过手机的SN号进行连接,手机的SN号可以通过"adb devices"查询得到。

Wifi连接:主要是通过IP地址进行连接。

 五、使用Weditor定位元素

启动weditor: python -m weditor

 

这个时候,浏览器会打开1个页面,这个页面对用的信息可以参照下图。

 

 

 

 

定位元素的方法

# 启动app
d.app_start("com.tencent.qqlive")
# 关闭app
d.app_stop("com.tencent.qqlive")
# 关闭所有的app
d.app_stop_all()

# 通过text属性定位元素
d(text='电影').click()
# 通过text属性定位元素, instance为第几个元素,不指定的话取默认值0
d(text='电影', instance=2).click()    # 点击text属性值为"电影"的第3个元素

# 通过resourceId定位元素
d(resourceId='com.tencent.qqlive:id/fh3').click()
d(resourceId='com.tencent.qqlive:id/fh3', instance=1).click()

# 使用类名定位元素
d(className='android.widget.TextView').click()
d(className='android.widget.TextView', instance=3).click()

# 通过xpath定位元素
d.xpath('//*[@resource-id="com.tencent.qqlive:id/fko"]').click()

# 滑动操作,通过坐标滑动,可以向上、下、左、右滑动
d.swipe(500, 1000, 500, 500)

# 返回
d.press("back")

# 返回桌面
d.press("home")

uiautoamtor2实现自动化的简单代码示例:

# coding: utf-8
import time

import uiautomator2 as u2


class AutoTestU2(object):
    """uiautoamtor2自动化测试类"""
    def __init__(self, sn=None, ip_addr=None, package_name=None):
        # 手机sn号
        self.sn = sn
        # 手机IP地址
        self.ip_addr = ip_addr
        # app包名
        self.package_name = package_name
        self.u2_driver = None

    def connect_by_usb(self):
        """通过usb连接手机"""
        self.u2_driver = u2.connect_usb(self.sn)

    def connect_by_wifi(self):
        """通过wifi连接手机"""
        self.u2_driver = u2.connect_wifi(self.ip_addr)

    def start_app(self):
        """启动APP"""
        self.u2_driver.app_start(self.package_name)

    def save_screenshot(self):
        """保存截图"""
        # 以当前时间戳命名截图
        current_time = time.strftime("%Y-%m-%d %H-%M-%S")
        file_name = "{}.png".format(current_time)
        self.u2_driver.screenshot(file_name)

    def stop_app(self):
        """关闭app"""
        self.u2_driver.app_stop(self.package_name)

    def auto_test_main(self):
        """自动化测试主函数"""
        print("===测试开始===")
        print("开始通过USB连接设备")
        self.connect_by_usb()
        print("开启启动app")
        self.start_app()
        time.sleep(10)
        print("开始截图")
        self.save_screenshot()
        print("开始停止app")
        self.stop_app()
        print("===测试结束===")


if __name__ == "__main__":
    # 传入你手机的sn号和需要操作的app包名
    autotest_u2 = AutoTestU2(sn="你手机的sn号", package_name="你需要操作的应用的包名")
    autotest_u2.auto_test_main()

 

posted @ 2021-04-29 18:39  theshy1103  阅读(848)  评论(0编辑  收藏  举报