在项目中,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的

最新文章

  1. log4net 2.0.4有问题,AdoNetAppender会报错
  2. 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
  3. 利用花生壳和IIS发布网页过程
  4. iOS系统右滑返回全局控制方案
  5. CentOS安装配置Git服务器(gitosis)
  6. php之图片处理类缩略图加水印
  7. Java基础知识强化69:基本类型包装类之Character案例(统计字符串中大写小写以及数字的次数)
  8. RAD路线规划2016版
  9. mongodb分页优化
  10. python 进制 转换
  11. subprocess实时获取结果和捕获错误
  12. .Net持续集成 —— Jenkins+Git+WebDeploy
  13. iostat各字段的来源和真实含义
  14. python programming作业5
  15. Java NIO系列教程(二) Channel
  16. JAVAEE——SSH项目实战01:SVN介绍、eclipse插件安装和使用方法
  17. 【树莓派】树莓派新版系统SSH连接被拒绝问题处理
  18. kettle安装部署及远程执行
  19. Java HashMap 源代码分析
  20. 【mysql】一次有意思的数据库查询分析。

热门文章

  1. Leetcode之并查集专题-765. 情侣牵手(Couples Holding Hands)
  2. 《Java语言程序设计》
  3. Java编程思想(四)初始化和清除
  4. storm常见问题
  5. TIME_WAIT和CLOSE_WAIT的区别
  6. Vue(一)环境搭建、创建项目
  7. Kettle无法打开文件资源库
  8. IDEA插件之FindBugs
  9. Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
  10. Python 运算符与数据类型