《自拍教程38》Python adb一键截屏

做Android手机系统或App测试的过程中,
如果碰到了bug,开发一般会需要测试人员提供当时的bug截图,
如何用Python 批处理脚本, 快速实现截图呢?

准备阶段
  1. adb shell screencap -p /sdcard/a.png 命令, 可以实现手机截图并保存到/sdcard/a.png
  2. adb pull /sdcard/a.png . 即可实现导出到当前路径(.代表当前路径)
  3. os.system可以调用以上 adb 命令行工具

Python批处理脚本形式

其实和写DOS批处理脚本类似,
Python只需要用os.system()函数,
即可快速实现调用各类命令行命令。

#coding=utf-8

import os

print("屏幕截取中...请稍候!")
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png .")
print("截图完毕!")
os.system("pause")

os.system(“pause”),建议尽量加上,其含义是暂停程序执行,
等待用户查看脚本执行结果,避免运行完毕后直接自动关闭脚本执行cmd窗口。

Python面向过程函数形式

找到可以封装成一个函数块的小代码块儿, 用函数封装起来.
函数的命名一般建议用"动词", 所以我们命名为: “screencap”,
封装好后, 用screencap()函数调用即可。

#coding=utf-8

import os

def screencap():     #封装
    print("屏幕截取中...请稍候!")
    os.system("adb shell screencap -p /sdcard/a.png")
    os.system("adb pull /sdcard/a.png .")
    print("截图完毕!")

screencap()               #调用
os.system("pause")

Python面向对象类形式
  1. 以"一切皆可归类"的思想, 先抽象化出一个类来,
    类名一般建议用"名词", 所以我们命名为"ScreenCapturer",
    代表屏幕捕捉器, 且一般要驼峰式(首字母大写)来规范类的命名.
  2. 养成良好的类的初始化(init)的习惯,
    初始化过程中, 可以pass(什么都不做)
  3. 这个ScreenCapturer 类, 目前只需要一个截屏的函数(动作功能)就足够了,
    函数的命名一般建议用"动词", 所以我们命名为: “screencap” .
  4. 类是一个抽象的事物, 必须实例化成具体的对象后,
    才能进行调用, 所以我们实例化并命名成了s_obj, 表明是一个对象.
  5. 实例化成具体对象后, 对象就可以调用screencap这个函数了.
#coding=utf-8

import os

class ScreenCapturer():    #类名
    def __init__(self):    #类的初始化
        pass

    def screencap(self):   #定义类内部的函数名
        print("屏幕截取中...请稍候!")
        os.system("adb shell screencap -p /sdcard/a.png")
        os.system("adb pull /sdcard/a.png .")
        print("截图完毕!")

s_obj = ScreenCapturer()  #类实例化成一个对象
s_obj.screencap()         #用对象来调用函数
os.system("pause")     

代码运行方式

确保Android设备通过USB线与电脑连接了,adb设备有效连接,
以上代码的3种实现形式都可以直接运行,
比如保存为adb_screencap.py并放在桌面,
每次需要截图的时候,双击运行adb_screencap.py,
就会在桌面上生成一个a.png。

有的Android系统是用screencap命令, 有的是用screenshot命令来截图。
需要自行尝试下。


更多更好的原创文章,请访问官方网站:www.zipython.com
自拍教程(自动化测试Python教程)
原文链接:https://www.zipython.com/#/detail?id=f8396e5cf8b443ec8b68de2fb4a72623
也可关注“武散人”微信订阅号,随时接受文章推送。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本帖最后由 591691826 于 2013-4-10 13:32 编辑 0.我只说些常用的以及目前用的到的 1.下载附件。解压后拷到c:windows\system32里面。 2.打开运行(快捷键windows键+R)输入cmd 回车。 3.输入adb devices 可以获取当前连接的设备。 4.输入adb shell 回车 接着输入su。这时候$变成#。说明你已经取得权限了,可以进行各项调试命令了。 5.如果要从电脑上传送文件到手机的话,使用adb push命令。格式:adb push 本地路径 手机路径 ;举例:把c盘根目录下的456.txt传送到system。则:adb push c:\456.txt /system/ 传送文件到system文件夹的话。需要先挂载system分区。再改读写权限。 如下:mount -o rw,remount -t yaffs2 /dev/block/mtdblock1 /system回车 (这是挂载分区) chmod 777 /system回车 (修改权限为可读) 这两步做完后退出shell指令端(exit回车 exit回车)就可以push文件到system里面去了。 如果push文件到sdcard卡的话。一般来说直接push就行。如果出现premission denied 的话,需要修改sdcard权限为可读写。即chmod 777 sdcard。 6。adb pull 是从手机传送文件到电脑上。格式: adb pull 手机路径 电脑路径 。会push的话pull很简单。大同小异嘛。 7.关于这个地方的权限,具体说下: 在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读、写、运行设定权限。例如我用ls -l命令列文件表时,得到如下输出: -rw-r--r-- 1 bu users 2254 2006-05-20 13:47 tt.htm 从第二个字符起rw-是说用户bu有读、写权,没有运行权,接着的r--表示用户组users只有读权限,没有运行权,最后的r--指其他人(others)只有读权限,没有写权和运行权。这是系统默认设置,我可以改写tt.htm,同组的人和其他人只有权读,没人有权运行,因为只是一个html文件,不必运行。这在Novell的directory services之前很先进。 读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,rw-r--r--用数字表示成644。 反过来说777就是rwxrwxrwx,意思是该登录用户(可以用命令id查看)、他所在的组和其他人都有最高权限。 再多说一句。我用chmod o-r tt.htm命令改权限,o-r是others的权限中减掉读。结果是 -rw-r----- 1 bu users 2254 2006-05-20 13:47 tt.htm 如果用命令chmod 777 tt.htm,结果是 -rwxrwxrwx 1 bu users 2254 2006-05-20 13:47 tt.htm 任何人都有读、写、运行三项权限。8。以后比如替换系统文件神马的不能开机。可以通过救援模式下adb命令替换系统文件并该权限即可。 .想写的就是这么多了。仅把我的心得告诉大家。内容编辑可能有些混乱。不好意思。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值