一、安裝Adb工具包
命令總覽:
adb devices # 列出當前連接的設備sn號 adb kill-server # 停止服務 adb start-server # 啟動服務 adb connect [ip:port] # 連接設備,port可以不指定 adb disconnect [ip:port] # 斷開設備 adb install -r [app安裝包路徑] # 通過app安裝包安裝app adb uninstall [app包名] # 卸載app adb shell pm list packages # 列出手機安裝的所有app的包名 adb shell pm list packages -s # 列出系統應用的所有包名 adb shell pm list packages -3 # 列出除了系統應用的第三方應用包名 adb shell am force-stop [app包名] # 強制停止應用 adb shell wm size # 查看屏幕分辨率 adb pull [手機路徑] [本地PC路徑] # 將文件從手機上拉到電腦上 adb push [本地PC路徑] [手機路徑] # 將文件從PC上推到手機上 adb shell ping [ip或者域名] # adb ping命令 adb -s [sn號] shell ping [ip或者域名] # 指定sn號的adb ping命令
下載adb工具包
瀏覽器輸入這個鏈接下載 ADB工具包:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
添加adb環境變量
檢查adb是否安裝成功
添加完成后,重新打開1個cmd窗口,檢查adb的版本信息,判斷adb是否安裝成功。
adb --version
將手機通過USB線連接到電腦,開啟手機的USB調試模式。
開啟USB調試模式的方法:
進入手機設置---關於手機,能看到手機的系統信息, 多次點擊"版本號"(大概5~6次的樣子),會提示 當前處於開發者模式。然后在"開發人員選項" --- "調試" --- "USB調試",將"USB調試"后面的按鈕打開。
打開后手機會收到一個"是否允許USB調試"的提示信息, 勾選"始終允許使用這台計算機進行調試", 點擊"確定"。
另外將鎖屏密碼關閉,顯示里的"休眠"設置為永不。
執行adb命令檢查連接的Android設備sn號
adb devices
注: 如果提示"adb server version (31) doesn't match this client (41); killing...",有可能是adb默認端口5037被占用了。可以嘗試按照如下方法解決問題:
netstat -ano|findstr 5037
tasklist | findstr [進程ID]
打開任務管理器,關閉對應的進程。
檢查是否還有其他進程占用5037端口:
再次執行"adb devices"命令查詢連接的設備的sn號。
關閉adb服務:adb kill-server
啟動adb服務: adb start-server
二、安裝Scrcpy投屏工具
進入這個鏈接下載:https://github.com/Genymobile/scrcpy/releases, 下載scrcpy壓縮包,下載完成后,解壓縮。
這個時候就能在PC上看到手機的屏幕投屏了。為了打開方便,可以為scrcpy.exe創建快捷方式。
三、安裝Uiautomator2
安裝uiautomator2
pip install uiautomator2
安裝weditor
pip install weditor
檢查uiautomator2和weditor版本
pip list
初始化adb設備,這個時候會在手機上安裝一個ATX應用。
python -m uiautomator2 init
執行完命令后,手機上會安裝1個ATX應用,外形看起來像個小黃車。點擊小黃車,點擊"啟動UIAUTOMATOR"。
如果提示"UIAutomator not starting",如截圖所示。則可以通過adb shell啟動。
通過adb shell啟動手機上的ATX服務。操作如下:
adb shell
chmod 775 /data/local/tmp/atx-agent
/data/local/tmp/atx-agent server -d
四、Uiautoamtor2連接手機的2種方式
uiautomator2連接手機有2種方式:
USB連接和wifi連接
USB連接:主要是通過手機的SN號進行連接,手機的SN號可以通過"adb devices"查詢得到。
Wifi連接:主要是通過IP地址進行連接。
五、使用Weditor定位元素
啟動weditor: python -m weditor
這個時候,瀏覽器會打開1個頁面,這個頁面對用的信息可以參照下圖。
定位元素的方法
# 啟動app d.app_start("com.tencent.qqlive") # 關閉app d.app_stop("com.tencent.qqlive") # 關閉所有的app d.app_stop_all() # 通過text屬性定位元素 d(text='電影').click() # 通過text屬性定位元素, instance為第幾個元素,不指定的話取默認值0 d(text='電影', instance=2).click() # 點擊text屬性值為"電影"的第3個元素 # 通過resourceId定位元素 d(resourceId='com.tencent.qqlive:id/fh3').click() d(resourceId='com.tencent.qqlive:id/fh3', instance=1).click() # 使用類名定位元素 d(className='android.widget.TextView').click() d(className='android.widget.TextView', instance=3).click() # 通過xpath定位元素 d.xpath('//*[@resource-id="com.tencent.qqlive:id/fko"]').click() # 滑動操作,通過坐標滑動,可以向上、下、左、右滑動 d.swipe(500, 1000, 500, 500) # 返回 d.press("back") # 返回桌面 d.press("home")
uiautoamtor2實現自動化的簡單代碼示例:
# coding: utf-8 import time import uiautomator2 as u2 class AutoTestU2(object): """uiautoamtor2自動化測試類""" def __init__(self, sn=None, ip_addr=None, package_name=None): # 手機sn號 self.sn = sn # 手機IP地址 self.ip_addr = ip_addr # app包名 self.package_name = package_name self.u2_driver = None def connect_by_usb(self): """通過usb連接手機""" self.u2_driver = u2.connect_usb(self.sn) def connect_by_wifi(self): """通過wifi連接手機""" self.u2_driver = u2.connect_wifi(self.ip_addr) def start_app(self): """啟動APP""" self.u2_driver.app_start(self.package_name) def save_screenshot(self): """保存截圖""" # 以當前時間戳命名截圖 current_time = time.strftime("%Y-%m-%d %H-%M-%S") file_name = "{}.png".format(current_time) self.u2_driver.screenshot(file_name) def stop_app(self): """關閉app""" self.u2_driver.app_stop(self.package_name) def auto_test_main(self): """自動化測試主函數""" print("===測試開始===") print("開始通過USB連接設備") self.connect_by_usb() print("開啟啟動app") self.start_app() time.sleep(10) print("開始截圖") self.save_screenshot() print("開始停止app") self.stop_app() print("===測試結束===") if __name__ == "__main__": # 傳入你手機的sn號和需要操作的app包名 autotest_u2 = AutoTestU2(sn="你手機的sn號", package_name="你需要操作的應用的包名") autotest_u2.auto_test_main()