Uiautomator2自動化測試框架


一、安裝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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM