Python3+Appium学习笔记04-自动下载apk

在项目中,app更新后,都会发布新的apk版本,然后去蒲公英对应的网站上扫码下载对应的apk进行测试。所以就在想,通过app参数进行安装时,是否可以先通过代码去拉取一遍最新的apk安装包。

因为学习之后肯定是想写成一个框架来用的。暂时只用看App包下的

先创建一个getcwd.py,代码如下

import os
def get_cwd():
    # 返回项目的根目录
    path = os.path.dirname(os.path.abspath(__file__))
    return path

通过返回的路径来确定根目录的路径。

接下来是ApkConfig.py的代码

import os
import getcwd
from selenium import webdriver
from FrameWord.Base import Base
import time


path = getcwd.get_cwd()  # 当前项目根目录路径
App_path = os.path.join(path, 'App')  # App文件夹所在的路径


class ApkConfig:
    """apk下载删除等方法"""

    def get_apk_name(self):
        """遍历App文件夹,获取apk的文件名"""
        # 遍历App文件夹下文件
        for i in os.listdir(App_path):
            # 如果是文件并已.apk结尾
            if os.path.isfile(os.path.join(App_path, i)) and os.path.splitext(i)[1] == '.apk':
                return i

    def get_apk_path(self):
        """apk路径"""
        apk_name = self.get_apk_name()
        app_path = os.path.join(App_path, apk_name)
        return app_path

    def remove_apk(self):
        """删除apk文件"""
        os.remove(self.get_apk_path())

    def get_apk(self):
        """下载apk安装包"""
        base = Base()
        # 设置chrome浏览器下载配置
        option = webdriver.ChromeOptions()
        prefs = {'profile.default_content_settings.popups': 0,
                 'download.default_directory': App_path}
        option.add_experimental_option('prefs', prefs)
        # 初始化一个带有配置的chrome实例
        driver = webdriver.Chrome(chrome_options=option)
        # 从配置文件获取apk下载地址,对应app蒲公英发布地址
        apk_url = base.config_get('AppConfig', 'url')
        # 请求该地址
        driver.get(apk_url)
        driver.maximize_window()
        driver.implicitly_wait(10)
        # 点击下载按钮
        driver.find_element_by_id('down_load').click()
        # 暂停2秒,等待浏览器创建下载任务。电脑反应慢的可以多加点时间。
        # 没这句会来不及创建下载任务就直接关闭了
        time.sleep(2)
        # 调用等待方法
        self.download_done()
        driver.quit()

    def download_done(self):
        """chrome下载未完成文件已.crdownloda结尾
        通过这点来判断是否下载完成。
        未完成就继续等待"""
        # 遍历App文件夹下文件
        for i in os.listdir(App_path):
            # 如果有.crdownloda结尾的文件存在
            if '.crdownload' in i:
                # 等待下载
                time.sleep(1)
                # 递归
                self.download_done()

下载apk方法中base = Base()可以去掉。url可以直接填写进去就行了。我是通过基类中的配合文件读取来读取的地址。

我这边是测试都OK的

posted @ 2019-05-13 14:48  梦忆安凉  阅读(471)  评论(0编辑  收藏  举报