一.背景描述:
在做App自动化的时候需要使用adb tools提供的截屏工具uiautomatorviewer.bat.但是windows在安卓8.0以上的手机上使用该工具截屏时会报错.通过百度发现是因为工具自身的原因导致的.
为了能使用该工具完成元素定位,根据原因完成了使用命令行的方式完成屏幕截图,需要截取两个文件(.png和.uix),并可以动态的生成文件名.
二.实现方案:
前提是:该电脑已安装了adb tools工具.
下载地址为:http://www.androiddevtools.cn/
1.通过命令行的方式先将截屏文件保存到手机中
adb shell uiautomator dump /sdcard/app.uix
adb shell screencap -p /sdcard/app.png
2.然后命令行的方式将手机中的文件导出到本地
adb pull /sdcard/app.uix D:/screenshot/app.uix
adb pull /sdcard/app.png D:/screenshot/app.png
3.使用uiautomatorviewer工具的打开文件,将本地截屏文件导入到工具.
添加前的效果:
image.png
添加后的效果:
image.png
image.png
Notice:在使用的时候又发现一个问题,不能每次截屏都输入上面的四行命令吧?
所以想到了批量处理bat文件.
4.在桌面上新建一个Aui.txt文件,然后将下面的命令复制进该文件后保存
@echo on
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix D:/screenshot/app.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png D:/screenshot/app.png
5.将文件后缀txt修改为bat.每次需要截屏时.点击该bat文件后会在对应的目录文件加screenshot中生成两个文件
image.png
Notice: 在使用过程中,发现每次截屏后都会把原来的截屏文件覆盖掉,下次再看原来的截屏文件时还需要重新截屏.
这有点得不偿失了.看了命令文件发现:是每次都使用了相同的文件名导致的.
下面对该问题进行改良.具体实现步骤如下:
解决该问题的思路是:
文件名+时间戳+文件后缀名的方式保证每次生成的文件名是不相同的.
6.获取系统当前时间
一般来说最简单的代码类似于:
set timeStamp=%date:/=-%_%time%
echo %timeStamp%
2020-06-30_17:23:44.43
但是这会引发两个问题:
1、10点前的timeStamp会出现空格,网上很多人在讨论了,但忽略了下面这个问题;
2、%date%和%time%都是直接读windows的时间格式(也就是右下角的那个时间格式),会出现不通用的结果。
改良方案:引入winc格式化时间,得出YYYYMMDDHHMinSec,代码如下:
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
echo %dt:~0,14%
2020063017234443
完整代码如下:
@echo on
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set m=%dt:~0,14%
adb shell uiautomator dump /sdcard/app.uix
adb pull /sdcard/app.uix D:/screenshot/app_%m%.uix
adb shell screencap -p /sdcard/app.png
adb pull /sdcard/app.png D:/screenshot/app_%m%.png
效果为:
image.png
为了适应时间格式的多样化,可以在时间中间增加分隔符进行格式化,例如
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
echo %dt:0,4%-%dt:4,2%-%dt:6,2%_%dt:8,2%-%dt:10,2%-%dt:12,2%-%dt:~14,2%
2020-06-30_17_23_44_43
自此,动态生成文件名的目的已经达到.记录下问题改良的过程,方便以后查阅.
网友评论