解決:uiautomatorviewer報(bào)錯(cuò):Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExcept...

老規(guī)矩:先給解決方案,再解釋。

先給出解決方案

在網(wǎng)上找了很多辦法都無(wú)效,但是可能其它人是有效的,以下為幾種解決辦法:

  1. 在cmd命令窗口中輸入 adb root 即可;
  2. 重啟手機(jī)無(wú)效;
  3. 重新把手機(jī)拔了再插;
  4. 重啟appuim;
  5. 重啟uiautomatorviewer.bat;
  6. 打開(kāi)手機(jī)開(kāi)發(fā)者權(quán)限,將USB調(diào)試按鈕重新啟動(dòng)就好了;
    好吧,以上所有方法都試完了,如果解決了,恭喜你們,我不符合以上情況。
  7. 各總嘗試后發(fā)現(xiàn):關(guān)閉界面中的動(dòng)態(tài)不停地進(jìn)行繪制的元素-進(jìn)度條(成功)。
    以下是我?guī)捉?jīng)周折尋找解決方案的記錄,如果只是為了解決問(wèn)題,不需要知道原因的,可以不用往下看了。

產(chǎn)生的原因

  1. 發(fā)現(xiàn)問(wèn)題:下午測(cè)試經(jīng)理找我,要用自動(dòng)化測(cè)試,需要使用安卓的開(kāi)發(fā)工具uiautomatorviewer獲取頁(yè)面元素進(jìn)行定位,發(fā)現(xiàn)人家淘寶、京東、支付寶都能成功定位,咱們app定位不了;
  2. 我立即打開(kāi)本地的uiautomatorviewer.bat,執(zhí)行Screenshot,唉可以啊,沒(méi)問(wèn)題。告訴測(cè)試經(jīng)理:你的sdk工具版本太低了,把自己的tools文件打包,“瀟灑”地發(fā)給了測(cè)試經(jīng)理;
  3. 過(guò)了一會(huì)兒,測(cè)試經(jīng)理又說(shuō),換完了還是不行???我看了下她的截圖:是首頁(yè),我截的是啟動(dòng)屏,于是我嘗試了首頁(yè),果然也不行;二級(jí)頁(yè)面-可以;所以問(wèn)題不在工具上,在界面元素上;出錯(cuò)問(wèn)題截圖:


    image.png
  4. 測(cè)試經(jīng)理問(wèn)咱是不是用了啥新技術(shù)了,導(dǎo)致截不了;我回想了一下頁(yè)面的開(kāi)發(fā)組成,大致瀏覽了首頁(yè)的組成結(jié)構(gòu):懸浮球、cardview、viewpager、下拉刷新、輪播、跑馬燈、GifImageView,LottieAnimationView,webview;看完之后發(fā)現(xiàn)頁(yè)面里也沒(méi)有特殊的東西,因?yàn)閯e的頁(yè)面也都引用的有這些元素,界面截取定位都沒(méi)問(wèn)題,唯一特例的是Lottie(Lottie是Airbnb開(kāi)源的一個(gè)支持 Android、iOS 以及 ReactNative,利用json文件的方式快速實(shí)現(xiàn)動(dòng)畫(huà)效果的庫(kù):https://github.com/airbnb/lottie-android),其它地方?jīng)]有用到。
  5. 于是將首頁(yè)的Lottie元素在二級(jí)頁(yè)面引用,然后嘗試截取,依然沒(méi)問(wèn)題,說(shuō)明跟Lottie無(wú)關(guān)。首先,配置、連接、設(shè)備環(huán)境肯定沒(méi)問(wèn)題(因?yàn)閯e的頁(yè)面可以截取定位)那么肯定跟界面里的元素有關(guān),最有可能出問(wèn)題的就是那些動(dòng)態(tài)元素--因?yàn)?..后面解釋原因。與Lottie無(wú)關(guān)、與Gif無(wú)關(guān)、懸浮球、跑馬燈關(guān)掉也不行,排除這些后,將目光聚焦到了頂部輪播那里,上個(gè)版本在首頁(yè)輪播那加了一個(gè)動(dòng)效(當(dāng)前輪播圖倒計(jì)時(shí)更換,有一個(gè)進(jìn)度指示器一直在跑。之前沒(méi)考慮輪播是因?yàn)槠渌?yè)面也有輪播,但是其它頁(yè)面沒(méi)有做這個(gè)跑進(jìn)度的效果)


    image.png
  6. 停掉輪播進(jìn)度指示
psv_top.setShowProgress(false);

Success:成功獲取首頁(yè)界面元素,發(fā)現(xiàn)世界都清爽了許多。


image.png

解釋

  1. uiautomator在獲取界面狀態(tài)信息時(shí),首先要等界面處于idle空閑狀態(tài)才會(huì)做dump操作。而顯示進(jìn)度那里每秒鐘就要繪制10次進(jìn)度,idle沒(méi)有足夠空閑的時(shí)間去完成uiautomator的dump操作。這就是uiautomator死活拿不到動(dòng)態(tài)界面信息的原因。
  2. 我之所以之前沒(méi)有考慮輪播的原因,是因?yàn)槠渌?jí)頁(yè)面也有輪播,還是一個(gè)輪播控件也能截取成功(只有首頁(yè)開(kāi)啟了進(jìn)度指示器的特效)。所以很多難題很多情況下都是很小的細(xì)節(jié)硬性的,一定要冷靜下拉仔細(xì)分析原因,才能找到最終的答案。

補(bǔ)充

uiautomatorviewer使用簡(jiǎn)介:

  1. 進(jìn)入以下目錄,Androidsdk-tools-bin,雙擊uiautomatorviewer.bat,


    image.png
  2. 然后彈出UI Automator Viewer窗口,按截圖操作,獲取當(dāng)前頁(yè)面,然后點(diǎn)擊相應(yīng)的元素,可以獲取相應(yīng)的元素的相關(guān)信息


    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容