老規(guī)矩:先給解決方案秋柄,再解釋。
先給出解決方案
在網(wǎng)上找了很多辦法都無效,但是可能其它人是有效的,以下為幾種解決辦法:
- 在cmd命令窗口中輸入 adb root 即可积蜻;
- 重啟手機(jī)無效闯割;
- 重新把手機(jī)拔了再插;
- 重啟appuim竿拆;
- 重啟uiautomatorviewer.bat宙拉;
- 打開手機(jī)開發(fā)者權(quán)限,將USB調(diào)試按鈕重新啟動就好了丙笋;
好吧谢澈,以上所有方法都試完了,如果解決了御板,恭喜你們锥忿,我不符合以上情況。 - 各總嘗試后發(fā)現(xiàn):關(guān)閉界面中的動態(tài)不停地進(jìn)行繪制的元素-進(jìn)度條(成功)怠肋。
以下是我?guī)捉?jīng)周折尋找解決方案的記錄敬鬓,如果只是為了解決問題,不需要知道原因的笙各,可以不用往下看了钉答。
產(chǎn)生的原因
- 發(fā)現(xiàn)問題:下午測試經(jīng)理找我,要用自動化測試酪惭,需要使用安卓的開發(fā)工具uiautomatorviewer獲取頁面元素進(jìn)行定位希痴,發(fā)現(xiàn)人家淘寶者甲、京東春感、支付寶都能成功定位,咱們app定位不了;
- 我立即打開本地的uiautomatorviewer.bat,執(zhí)行Screenshot,唉可以啊鲫懒,沒問題嫩实。告訴測試經(jīng)理:你的sdk工具版本太低了,把自己的tools文件打包窥岩,“瀟灑”地發(fā)給了測試經(jīng)理甲献;
-
過了一會兒,測試經(jīng)理又說颂翼,換完了還是不行盎稳鳌?我看了下她的截圖:是首頁朦乏,我截的是啟動屏球及,于是我嘗試了首頁,果然也不行呻疹;二級頁面-可以吃引;所以問題不在工具上,在界面元素上刽锤;出錯問題截圖:
image.png - 測試經(jīng)理問咱是不是用了啥新技術(shù)了镊尺,導(dǎo)致截不了;我回想了一下頁面的開發(fā)組成并思,大致瀏覽了首頁的組成結(jié)構(gòu):懸浮球庐氮、cardview、viewpager纺荧、下拉刷新旭愧、輪播、跑馬燈宙暇、GifImageView输枯,LottieAnimationView,webview占贫;看完之后發(fā)現(xiàn)頁面里也沒有特殊的東西桃熄,因為別的頁面也都引用的有這些元素,界面截取定位都沒問題型奥,唯一特例的是Lottie(Lottie是Airbnb開源的一個支持 Android瞳收、iOS 以及 ReactNative,利用json文件的方式快速實現(xiàn)動畫效果的庫:https://github.com/airbnb/lottie-android),其它地方?jīng)]有用到厢汹。
-
于是將首頁的Lottie元素在二級頁面引用螟深,然后嘗試截取,依然沒問題烫葬,說明跟Lottie無關(guān)界弧。首先凡蜻,配置、連接垢箕、設(shè)備環(huán)境肯定沒問題(因為別的頁面可以截取定位)那么肯定跟界面里的元素有關(guān)划栓,最有可能出問題的就是那些動態(tài)元素--因為...后面解釋原因。與Lottie無關(guān)条获、與Gif無關(guān)忠荞、懸浮球、跑馬燈關(guān)掉也不行帅掘,排除這些后委煤,將目光聚焦到了頂部輪播那里,上個版本在首頁輪播那加了一個動效(當(dāng)前輪播圖倒計時更換修档,有一個進(jìn)度指示器一直在跑素标。之前沒考慮輪播是因為其它頁面也有輪播,但是其它頁面沒有做這個跑進(jìn)度的效果)
image.png - 停掉輪播進(jìn)度指示
psv_top.setShowProgress(false);
Success:成功獲取首頁界面元素萍悴,發(fā)現(xiàn)世界都清爽了許多头遭。
image.png
解釋
- uiautomator在獲取界面狀態(tài)信息時,首先要等界面處于idle空閑狀態(tài)才會做dump操作癣诱。而顯示進(jìn)度那里每秒鐘就要繪制10次進(jìn)度计维,idle沒有足夠空閑的時間去完成uiautomator的dump操作。這就是uiautomator死活拿不到動態(tài)界面信息的原因撕予。
- 我之所以之前沒有考慮輪播的原因鲫惶,是因為其它二級頁面也有輪播,還是一個輪播控件也能截取成功(只有首頁開啟了進(jìn)度指示器的特效)实抡。所以很多難題很多情況下都是很小的細(xì)節(jié)硬性的欠母,一定要冷靜下拉仔細(xì)分析原因,才能找到最終的答案吆寨。
補(bǔ)充
uiautomatorviewer使用簡介:
-
進(jìn)入以下目錄赏淌,Androidsdk-tools-bin,雙擊uiautomatorviewer.bat啄清,
image.png -
然后彈出UI Automator Viewer窗口六水,按截圖操作,獲取當(dāng)前頁面辣卒,然后點(diǎn)擊相應(yīng)的元素掷贾,可以獲取相應(yīng)的元素的相關(guān)信息
image.png