当前位置:   article > 正文

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

手机app自动化截图

1.需求来源

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

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

adb截图命令:

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

adb将文件传到本机:

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

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

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

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

4.效果.

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/841062
推荐阅读
相关标签
  

闽ICP备14008679号