1. 程式人生 > >【工具引入】uiautomatorviewer 查詢元素後自動生成程式碼

【工具引入】uiautomatorviewer 查詢元素後自動生成程式碼

緣起

公司部門調整PC部門和無線部門合併,原本負責主站PC端自動化的同事需要馬上上手安卓,IOS自動化。對於初次接觸移動端的測試者來說,跨度還是有點大的。加之人員有些變動,不得不搞個工具降低學習成本,馬上產出。公司app頁面上有動態載入的元素,每次用Appium自帶的工具抓取Xpath時,總是報錯。為了降低自動化同學的學習成本和解決無法的問題,就對uiautomatorviewer 二次開發。

和原生的SDK自帶的 uiautomatorviewer 優點:

  • 優化截圖速度,修復動態元素載入頁面截圖報錯的問題
  • 優化Xpath提取規則,擷取相對短的Xpath
  • 支援擷取動態載入的頁面
  • 自動生成程式碼
  • 支援U2的xpath 在改造上述工具分享帖子中,有幸得到@carl 老師的神點撥:“這個還可以相容ios錄製呢,好好玩”,於是就想繼續對此進行再次開發,以支援IOS,順便也偷點懶,生成一下IOS自動化中機械重複的程式碼(driver.findElement("//xxx.xxxxx").click())。不管是不是重複造輪子,對一個剛接觸初次接觸安卓,和IOS自動化的自己來說也是一次難得的學習機會。 不足之處希望各位老師見諒。 新工具特點:
  • 不需要設定inspector裡面的各種引數,不需要啟動appium
  • 重要的一點,不需要換定位工具,安卓那邊用uiautomatorviewer ,IOS這邊用inspector
  • 自動生成程式碼,我喜歡的懶方式,機械的事情,我只想Ctrl+C ,Ctrl+V
  • 地址: https://github.com/512433465/autotest_helper

原理

appium自帶工具安卓端和ios原理都是相同的。截圖+Pagesource的xml去根據座標高亮選中元素。

  • 安卓:安卓定位基於【右上座標】【左下座標】兩點定位元素佈局
  • IOS:IOS定位基於【右上座標】【高度,寬度】由定位點橫軸長,縱軸長去定位元素佈局 其他相差無幾,搞清楚這兩點我們就好著手改造
  • 獲取PageSource的 xml 參考WebDriverAgent的wiki
     把節點名稱都換成node (XCUIElementXXXX--->node)因為以uiautomatorviewer 為基礎,所以只能Xml以安卓端的為參照
  • 獲取截圖並壓縮,不同的IOS機型截影象素是不同的,而且換算起來很麻煩,所以我選擇壓縮,壓縮後也不用擔心控制元件座標與截圖對應關係
  • 生成xpath,基於安卓的原理稍加改造即可。 以上參考WebDriverAgent的wiki和@carl 老師的帖子傳送門

使用

  • 安卓端:jar放在【\android-sdk-windows\tools\lib】下(請先備份您自帶的),啟動方式猛擊【\android-sdk-windows\tools\uiautomatorviewer.bat】
  • IOS位置任意位置:shell終端執行: java -XstartOnFirstThread -jar uiautomatorviewer.jar -XstartOnFirstThread(ios使用時,請先確保你用appium的inspector是可以抓取元素的)

具體使用方式請參照Git上詳細使用說明,這裡不贅述了。請務必先看完Git上的readme有疑問再問問題

效果

  • 安卓端:  
  • IOS端:  

實踐並總結一下各路大神的無私分享,謝謝各位授之於漁,如有雷同實屬參照,改造工具沒別的,跟著好的思路分享,就是幹!非常感謝,期待大神們分享更多更好的工具思路。
jar包放到Git上了jar包和具體使用說明