一.背景描述:
在做App自動化的時候需要使用adb tools提供的截屏工具uiautomatorviewer.bat.但是windows在安卓8.0以上的手機(jī)上使用該工具截屏?xí)r會報(bào)錯.通過百度發(fā)現(xiàn)是因?yàn)楣ぞ咦陨淼脑驅(qū)е碌?
為了能使用該工具完成元素定位,根據(jù)原因完成了使用命令行的方式完成屏幕截圖,需要截取兩個文件(.png和.uix),并可以動態(tài)的生成文件名.
二.實(shí)現(xiàn)方案:
前提是:該電腦已安裝了adb tools工具.
下載地址為:http://www.androiddevtools.cn/
1.通過命令行的方式先將截屏文件保存到手機(jī)中
adb shell uiautomator dump /sdcard/app.uix
adb shell screencap -p /sdcard/app.png
2.然后命令行的方式將手機(jī)中的文件導(dǎo)出到本地
adb pull /sdcard/app.uix D:/screenshot/app.uix
adb pull /sdcard/app.png D:/screenshot/app.png
3.使用uiautomatorviewer工具的打開文件,將本地截屏文件導(dǎo)入到工具.
添加前的效果:
添加后的效果:
Notice:在使用的時候又發(fā)現(xiàn)一個問題,不能每次截屏都輸入上面的四行命令吧?
所以想到了批量處理bat文件.
4.在桌面上新建一個Aui.txt文件,然后將下面的命令復(fù)制進(jìn)該文件后保存
@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.每次需要截屏?xí)r.點(diǎn)擊該bat文件后會在對應(yīng)的目錄文件加screenshot中生成兩個文件
Notice: 在使用過程中,發(fā)現(xiàn)每次截屏后都會把原來的截屏文件覆蓋掉,下次再看原來的截屏文件時還需要重新截屏.
這有點(diǎn)得不償失了.看了命令文件發(fā)現(xiàn):是每次都使用了相同的文件名導(dǎo)致的.
下面對該問題進(jìn)行改良.具體實(shí)現(xiàn)步驟如下:
解決該問題的思路是:
文件名+時間戳+文件后綴名的方式保證每次生成的文件名是不相同的.
6.獲取系統(tǒng)當(dāng)前時間
一般來說最簡單的代碼類似于:
set timeStamp=%date:/=-%_%time%
echo %timeStamp%
2020-06-30_17:23:44.43
但是這會引發(fā)兩個問題:
1玻侥、10點(diǎn)前的timeStamp會出現(xiàn)空格,網(wǎng)上很多人在討論了目养,但忽略了下面這個問題办龄;
2松捉、%date%和%time%都是直接讀windows的時間格式(也就是右下角的那個時間格式)段化,會出現(xiàn)不通用的結(jié)果纺酸。
改良方案:引入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
效果為:
為了適應(yīng)時間格式的多樣化,可以在時間中間增加分隔符進(jìn)行格式化,例如
@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
自此,動態(tài)生成文件名的目的已經(jīng)達(dá)到.記錄下問題改良的過程,方便以后查閱.