title: adb命令截图图片显示为黑屏问题总结
date: 2020-01-07
tags: adb android
author: YeXiaoXin
发现问题
在我实际的项目开发过程中,发现appium 驱动在调截图的方法时 溢出错误如下:
执行代码语法出错Message: An unknown server-side error occurred while processing the command.
Original error: io.appium.uiautomator2.common.exceptions.
TakeScreenshotException: Failed to capture a screenshot. Does the current view have 'secure' flag set?
经过查询相关资料得知,这种错误 是由于APP 在该页面限制截图导致的,(截图的这个界面为账户和密码输入界面)。
尝试解决
使用android adb命令截图
当在调用appium 驱动溢出错误时,调用adb命令截图,命令如下:
adb shell screencap -p /sdcard/screen.png
使用pull命令将截图传至电脑C:盘
adb pull /sdcard/Pictures/Screenshots C:\
打开图片后显示为黑色空白,图如下:
以上方法无法解决截图的问题。
使用手机自带截图功能截图
手机自带截图实现有两种方案:
1: 使用组合按键的方式,如我所使用的魅族手机可使用 音量加 + 电源键实现截图的功能
2:或者使用下拉通知栏 中的 截图按钮截图
由于未找到 android 如何手机组合 按键的命令,所以我选择了第2方案,方案实现步骤如下:
1、使用 rm /sdcard/Pictures/Screenshots/*.jpg 清除 手机截图文件夹的全部截图
rm /sdcard/Pictures/Screenshots/*.jpg
2、使用 adn shell input swipe 360 0 360 640 200 下拉手机通知栏
adb shell input swipe 360 0 360 640 200
3、点击截图按钮
input tap 250 250
如下图(非真实场景,可以将该按钮替换为备忘录):

4、读取图片名称后,将手机图片传送至pc地址 文件夹:
jpg_name=os.popen('adb shell ls /sdcard/Pictures/Screenshots/').read().strip()
os.popen('adb pull /sdcard/Pictures/Screenshots/%s %s'%(jpg_name,tmpdir))
其中tmpdir 为PC文件夹名称
5、清除手机截图
手机截图清除分为两个步骤:
1):使用rm命令删除,如下:
rm /sdcard/Pictures/Screenshots/*.jpg
2):使用广播命令更新 手机文件的缓存(如不执行此命令则会导致手机依然显示之前删除的图片)
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/Pictures/Screenshots/
6、在PC端应用图片(略)
7、删除PC端图片,命令如下:
os.remove(filename)
filename 为PC端 图片的位置。
在项目开发中遇到appium驱动截图溢出错误,发现是APP限制截图导致。尝试通过ADB命令截图,但图片显示为黑屏。采用手机自带的截图功能,包括组合按键和下拉通知栏截图,成功解决问题。详细步骤包括清除手机截图、下拉通知栏、点击截图按钮、传送图片到PC等。
349





