1、Atx的安裝
安裝adb
使用以下命令安裝atx最新版
pip install --pre -U uiautomator2
手機接到電腦上之后,需要先運行一下命令:
python -m uiautomator2 init將需要的程序部署到手機上(一次即可)
2、Atx Weditor
ATX Weditor是一個python庫,命令行安裝
pip install --pre weditor , 命令行啟動python -m weditor(PS: windows可以雙擊weditor快捷方式),會自動打開一個網頁,用網頁作為其Inspector
3.連接設備
appium需要構造一個desiredCapabilities,其中的udid字段通常對應設備的序列號。
以一個常見的配置文件為例
desired_caps = { # 平台 android 'platformName': 'Android', # 手機設備名稱 'deviceName': '2d869e6', # android系統的版本號 'platformVersion': '9', # 安裝包路徑 # 'app': 'F:\download\XXX.apk', # apk包名 'appPackage': 'com.tencent.mm', # apk的launcherActivity 'appActivity': '.ui.LauncherUI', # 默認neReset為false,不要在會話前重置應用狀態,每次啟動都跟第一次啟動一樣,變為true則不一樣 # 會話前不重置應用狀態 默認是false 'noReset': True, # 'appWaitActivity':'com.tencent.mm.plugin.webview.ui.tools.WebViewUI', # 下面兩行代碼是為了屏蔽軟件盤以至於可以輸入中文 'unicodeKeyboard': True, # 使用unicode編碼方式發送字符串 # 'resetKeyboard': False, # 將鍵盤隱藏起來 # 在 Android 上,這也會在會話結束后自動清除被測應用 "fullReset": False, 'chromeOptions': {'androidProcess': 'com.tencent.mm.plugin.webview.ui.tools.WebViewUI'} # "automationName": "uiautomator2" # newCommandTimeout設置為更大的值 # "newCommandTimeout":240 }
atx是沒有這類配置文件,必需的字段只有一個就是設備的序列號,這里用ip地址也可以。其他的都是可選的。對於是否啟動應用給用戶提供了的選擇權。
atx代碼為:
import uiautomator2 as u2 d = u2.connect("dgsdg") d.set_fastinput_ime(True) s = d.session("com.netease.cloudmusic")
感覺方便多了,fastinput_ime是專門為自動化定制的輸入法,支持中文的輸入,和一些特殊的指令如搜索,清空。
d.session函數對應於appium的session機制,每次運行相關代碼的時候都會先檢測一下應用是否存活。
注:atx連接的時候可以填手機的序列號或者ip地址。因為測試代碼最終是與手機上的一個服務的atx-agent通信,所以也支持填寫IP,但是需要運行代碼的電腦跟手機在同一個網段。
4、控件的選擇與操作
appium常用定位元素的方法為find_element_by_xpath, find_element_by_id, find_element_by_text
一種常見的寫法為
driver.implicitly_wait(10) # 設置元素的查找時間10s element = driver.find_element_by_text("Settings") if element: element.click() 轉化成atx代碼為 d(text="Settings").click(timeout=10) atx不推薦用xpath,因為要dump所有的hierarchy,速度比較慢。推薦用的時候各種查詢條件混合一起使用。 典型的用法為 d(className="android.widget.Button", textContains="登錄").click() # using xpath d.xpath('//android.widget.Button[contains(@text, "登錄")]').click()
5、彈框的處理
現在高版本的手機基本都會有一些權限確認窗口或者安裝確認框。如果處理不好會非常影響自動化。
看到一個帖子說是可以配置一下就可以解決彈框了(PS:應該是只針對iOS的) https://testerhome.com/topics/14513
driver.switch_to.alert.accept() atx的方法更自由一點,你可以自由選擇處理什么內容的彈窗,以及怎么處理。一個常見的自動點擊安裝按鈕的方法 d.watcher("INSTALL").when(text="安裝").click() d.watcher("NEXT").when(text="下一步").click() d.watchers.watched = True
官方文檔:https://github.com/openatx/uiautomator2
參考資料:https://testerhome.com/topics/14880