• 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的

  • 相关阅读:
    javascript基础之两种函数的定义方法
    与input有关的一些操作
    SpringMVC(八) RequestMapping HiddenHttpMethodFilter
    SpringMVC(七) RequestMapping 路径中带占位符的URL
    SpringMVC(六) RequestMapping 路径中ant风格的通配符
    SpringMVC(五) RequestMapping 请求参数和请求头
    SpringMVC(四) RequestMapping请求方式
    SpringMVC(三) RequestMapping修饰类
    SpringMVC(二) SpringMVC Hello World
    SpringMVC(一) SpringMVC概述
  • 原文地址:https://www.cnblogs.com/myal/p/10856541.html
Copyright © 2020-2023  润新知