APP自动化,实现APP截图并回传到本机的一个小脚本

1.需求来源

公司里测试的产品,主要在APP端,软件出现异常时,APP有收集日志功能. 收集的日志,会自动传输到服务器上.
在填写BUG时,需要附上日志上传的截图. 经常的做法是:
1.通过软件拍照,同步到电脑上. 得到这张截图. 问题:手机画质和亮度影响,可能有不清晰的情况.
2.通过平板自身的截图功能,平板截图后,再导到电脑上(不管是有线USB传输文件,还是adb命令).
不管是哪个方式,都比较麻烦.且方式1会给手机内存造成一定负担,自己删除也麻烦.

2.通过adb实现截图再传到本机

adb截图命令:

adb  shell screencap -p sdcard/screen/filename.png

adb将文件传到本机:

adb  pull sdcard/screen/filename.png d:  # 传到d盘根目录下

延伸:将本机文件传到平板上.

adb  push d:\filename.png sdcard/screen/

3.脚本实现

import os
import time

def file_time():
	# 返回当前的时间戳 2022-06-10_16_51_53
    now_time = time.localtime()  # [2022, 6, 10, 16, 3, 5, 0, 335, 0]
    date_1 = '-'.join(str(i).zfill(2) for i in now_time[:3])
    time_1 = '_'.join(str(i).zfill(2) for i in now_time[3:6])
    return date_1 + '_' + time_1

def get_devices():
    # 获取所有连接设备的列表
    all_devices = []
    cmd = 'adb devices'
    result = os.popen(cmd).readlines()[1:]
    for item in result:
        if item != "\n":
            all_devices.append(str(item).split("\t")[0])
    # print(get_time(),f"当前连接的设备有:{len(all_devices)}")
    return all_devices  # 设备列表['device113','10.2.8.103:5555',3]
    
def app_screenshot(device='', file_name=''):
	# 注意:logger是自己封装的log函数,这里报错时,请自己封装一个.或者直接用print替代.
    if not get_devices():  # 先检测当前电脑有没有连接设备
        logger.warning("当前电脑没有连接任何一个Android设备,无法进行截屏操作.请检查设备连接情况.")
        return
    dir = "D:\AutomationScreen"  # 创建存放截图的电脑文件夹,根据自己需要设置
    if not os.path.exists(dir):
        os.makedirs("D:\AutomationScreen")  # 还没有这个文件夹,就创建一个
    path = '/sdcard/lxb_shoot'  # 存放截图的平板文件夹,根据自己需要设置
    if not file_name:
        file_name = 'ScreenShoot' + file_time()  # 没有指定文本名称时,使用时间戳
    try:
        os.system(f"adb shell mkdir -p {path}")  # 先创建一个文件夹
    except:
        pass
    if device:  # 多设备的情况下,需要指定设备截图.
        # 指定设备
        os.system(f"adb -s {device} shell screencap -p {path}/{file_name}.png")
        logger.debug(f"截图成功,截图存放位置:{path}/{file_name}.png")
        time.sleep(1)  # 给个短暂等待,让图片正常生成.
        os.system(f"adb -s {device} pull {path}/{file_name}.png {dir}")
        logger.debug(f"截图下载到本机成功,截图存放位置:{dir}\\{file_name}.png")  # windows是反斜杠.
    else:
        os.system(f"adb shell screencap -p {path}/{file_name}.png")
        logger.debug(f"截图成功,截图存放位置:{path}/{file_name}.png")
        time.sleep(1)
        os.system(f"adb pull {path}/{file_name}.png {dir}")
        logger.debug(f"截图下载到本机成功,截图存放位置:{dir}\\{file_name}.png")
        
if __name__ == '__main__':
    app_screenshot()

4.效果.

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值