Appium+python之APP自动化四(安装app)

一、python中adb命令安装app

adb命令安装app的前提条件需要先启动夜神模拟器(设备),且adb已连接设备,此处设定了三种安装方式:常规安装、覆盖安装、降级安装(安装比当前版本低的版本)

在执行安装app步骤前首先判断了是否已连接设备,若连接了设备才执行安装的步骤,否则就返回当前连接设备的状态情况

import os
from app_test_demo import adb_connect


class AppInstall:

    def __init__(self, device_name, apk_path, method=''):
        self.apk_path = apk_path  # apk的路径
        self.install_method = method  # 安装的app方法,常规安装(默认)、R(覆盖安装)、D(降级安装)
        self.device = device_name  # 设备的名称 

    def app_install(self):  # 安装的方法
        adb_cont = adb_connect.AdbConnect(self.device)  # 初始化adb连接的类,传入设备名称
        device_status = adb_cont.adb_connect()  # 调用adb连接类的方法连接设备
        if "已连接上设备" in device_status:  # 如果已连接设备则执行下面的安装app步骤
            print(device_status)  # 打印连接设备的列表 
            try:
                if self.install_method == '':  # 判断是否传入的安装方法为空
                    self.app_direct_install()  # 调用常规安装app的方法
                elif self.install_method == 'R':  # 传入了R参数,表示覆盖安装
                    self.app_replace_install()  # 调用覆盖安装的方法
                elif self.app_downgrade_install() == 'D':  # 传入了D参数,表示降级安装
                    self.app_downgrade_install()  # 调用降级安装的方法
                else:
                    pass
            except Exception as e:  # 如果有错误则打印错误
                print(e)
        else:
            print(device_status)  # 如果不是已连接设备,则打印连接设备列表

    def app_direct_install(self):  # 常规安装app的方法
        install = os.popen("adb install {}".format(self.apk_path))  # 执行adb install命令常规安装
        install_re = install.read()  # 把安装的结果赋值给变量install_re
        if 'Success' in install_re[-9:-1]:  # 判断安装结果的部分包含Success
            return print("app已成功安装")  # 打印app已安装成功
        else:
            return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))

    def app_replace_install(self):  # 覆盖安装的方法
        install = os.popen("adb install -r {}".format(self.apk_path))  # 执行adb install -r命令覆盖安装
        install_re = install.read()
        if 'Success' in install_re[-9:-1]:
            return print("app已成功安装")
        else:
            return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))

    def app_downgrade_install(self):  # 降级安装的方法
        install = os.popen("adb install -r -d {}".format(self.apk_path))  # 执行adb install -r -d命令降级安装
        install_re = install.read()
        if 'Success' in install_re[-9:-1]:
            return print("app已成功安装")
        else:
            return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))


if __name__ == '__main__':
    # a = AppInstall(r"D:\ac\APP\tools\yibijizhang.apk", "127.0.0.1:62001", method="R")
    # a.app_install()
    b = AppInstall("127.0.0.1:62001", r"D:\download\meituan10.10.403.apk")
    b.app_install()

1. 定义初始化方法

初始化方法中包含了三个参数:
① apk_path为安装app的apk包路径
② method为安装的方法:常规安装(默认)、覆盖安装、降级安装(安装比当前版本低的版本)
③ device_name为连接设备的名称,要使用设备名称判断adb是否连接设备

def __init__(self, device_name, apk_path, method=''):
    self.apk_path = apk_path  # apk的路径
    self.install_method = method  # 安装的app方法,常规安装(默认)、R(覆盖安装)、D(降级安装)
    self.device = device_name  # 设备的名称

2. 执行安装app的方法

此处定义app执行安装的方法,先实例化连接模拟器的类,判断adb是否已连接模拟器,连接成功则根据传入的安装方法调用对应安装app的方法

def app_install(self):  # 安装的方法
    adb_cont = adb_connect.AdbConnect(self.device)  # 实例化adb连接的类,传入设备名称
    device_status = adb_cont.adb_connect()  # 调用adb连接类的方法连接设备
    if "已连接上设备" in device_status:  # 如果已连接设备则执行下面的安装app步骤
        print(device_status)  # 打印连接设备的列表
        try:
            if self.install_method == '':  # 判断是否传入的安装方法为空
                self.app_direct_install()  # 调用常规安装app的方法
            elif self.install_method == 'R':  # 传入了R参数,表示覆盖安装
                self.app_replace_install()  # 调用覆盖安装的方法
            elif self.app_downgrade_install() == 'D':  # 传入了D参数,表示降级安装
                self.app_downgrade_install()  # 调用降级安装的方法
            else:
                pass
        except Exception as e:  # 如果有错误则打印错误
            print(e)
    else:
        print(device_status)  # 如果不是已连接设备,则打印连接设备列表

3. 常规安装app的方法

定义常规安装app的方法使用adb install <apk包路径>

def app_direct_install(self):  # 常规安装app的方法
    install = os.popen("adb install {}".format(self.apk_path))  # 执行adb install命令常规安装
    install_re = install.read()  # 把安装的结果赋值给变量install_re
    if 'Success' in install_re[-9:-1]:  # 判断安装结果的部分包含Success
        return print("app已成功安装")  # 打印app已安装成功
    else:
        return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))

4. 覆盖安装app的方法

定义覆盖安装app的方法使用adb install -r <apk包路径>

def app_replace_install(self):  # 覆盖安装的方法
    install = os.popen("adb install -r {}".format(self.apk_path))  # 执行adb install -r命令覆盖安装
    install_re = install.read()
    if 'Success' in install_re[-9:-1]:
        return print("app已成功安装")
    else:
        return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))

5. 降级安装app的方法

定义覆盖安装app的方法使用adb install -r -d <apk包路径>

def app_downgrade_install(self):  # 降级安装的方法
    install = os.popen("adb install -r -d {}".format(self.apk_path))  # 执行adb install -r -d命令降级安装
    install_re = install.read()
    if 'Success' in install_re[-9:-1]:
        return print("app已成功安装")
    else:
        return print("app未成功安装,安装结果:{}\n覆盖或降级安装需要在初始化时添加安装附加参数:R(覆盖安装)、D(降级安装)".format(install_re[-41:-2]))



Appium+python之APP自动化全集

1、Appium+python之APP自动化一

2、Appium+python之APP自动化二(app启动)

3、Appium+python之APP自动化三(连接设备)

5、Appium+python之APP自动化五(卸载app)

posted @ 2023-02-16 17:48  ll=ll  阅读(419)  评论(0编辑  收藏  举报