<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 自動化,Appium 憑什么使用 UiAutomator2?

          共 3864字,需瀏覽 8分鐘

           ·

          2020-08-25 15:25


          點擊上方“AirPython”,選擇“加為星標

          第一時間關(guān)注 Python 技術(shù)干貨!


          1. UiAutomator2 是什么

          可能很多人對?UiAutomator2?和?UiAutomator?傻傻分不清楚

          UiAutomator?是 Google 開發(fā)的一款運行在 Android 設(shè)備上的 UI 自動化測試工具,基于JAVA語言,使用它有一個限制,就是必須打包成 APK 或 JAR,然后上傳到設(shè)備,才能運行

          事實上,UiAutomator2?同樣有?JAVA和 Python 版,今天我們聊的是 Python 版本的 UiAutomator2

          至于 JAVA 版本的可以參考之前寫的文章:點我查看

          Python 版本的 UiAutomator2 項目地址:

          https://github.com/openatx/uiautomator2

          2.Appium 和?UiAutomator2

          作為移動端自動化的鼻祖,早期版本的 Appium 是基于 UiAutomator?和 Bootstrap.jar

          其中,Bootstrap 在 Appium初始化的時候,被推送到 Android 設(shè)備上,負責監(jiān)聽 Appium 發(fā)過來的請求,并轉(zhuǎn)換后發(fā)送給 UiAutomator 去處理,完成自動化操作

          最新版本的 Appium 加入了對 UiAutomator2 的支持,原理進行了更新,功能和穩(wěn)定性更加完善

          原理圖可以參考:

          3.準備

          在使用?UiAutomator2 之前,需要做如下準備

          1、在 PC 端配置 Android 開發(fā)環(huán)境

          2、使用 pip 安裝?uiautomator2?依賴

          #?安裝依賴
          pip3?install?-U?uiautomator2

          #?如果需要截屏,需要安裝pillow
          pip3?install?pillow

          3、在手機上安裝?atx-agent?應用?

          ps:atx-agent 作為服務(wù)端,一直運行在后臺

          #?安裝apk服務(wù)到手機上
          python?-m?uiautomator2?init

          4、安裝 weditor

          WEditor?通過 ip 連接手機,即可以實時查看 App 的界面元素信息

          和 Appium DeskTop 類似,可以模擬點擊、滑動操作、生成操作源碼等功能

          首先,通過 pip 安裝 weditor 依賴包

          #?基于瀏覽器查看?App?的界面元素
          pip3?install?-U?weditor

          然后,在命令行輸入 weditor,會自動在瀏覽器中打開,接著通過 ip 連接對應的設(shè)備,即可以獲取設(shè)備端當前界面的控件信息

          信息內(nèi)容包含:控件的層級關(guān)系、控件 ID、文本內(nèi)容、坐標值等內(nèi)容

          4.實戰(zhàn)一下

          還是以閑魚搜索商品為例,聊聊 UiAutomator2 的使用?

          1、連接設(shè)備

          使用 UiAutomator2 連接設(shè)備有?3?種方式,分別是:

          • 局域網(wǎng)設(shè)備 IP 地址

          • USB 連接 +?設(shè)備序列號

          • ADB?+ IP + 端口號

          import?uiautomator2?as?u2

          #?方式一:局域網(wǎng)設(shè)備ip地址
          device?=?u2.connect(手機ip地址)

          #?方式二:USB +?設(shè)備序列號
          device?=?u2.connect(手機序列號)

          #?方式三:ADB+
          #?首先,設(shè)備用USB線連接PC,輸入命令:adb tcpip 端口號進行映射
          #?拔掉USB線,通過ip地址+端口號進行連接
          device?=?u2.connect_adb_wifi(手機ip地址:端口號)

          2、打開閑魚 APP

          調(diào)用上面?device 對象中?app_start()?方法,傳入應用的包名作為參數(shù)可以打開應用

          需要注意的是,方法中的第二個參數(shù)如果傳入 True,可以冷啟動 App,默認值為 False

          #?打開應用
          device.app_start(PACKAGE_NAME,?stop=True)

          3、點擊搜索欄進入搜索界面

          首先,全局設(shè)置一個隱式等待,保證查找元素的時候避免因為卡頓、網(wǎng)絡(luò)導致的異常

          #?隱式等待20s,保證控件加載完成
          device.implicitly_wait(20)

          然后,通過?WEditor?定位到搜索入口控件的基本信息

          常用的?UiAutomator2 定位方式有?6?種,分別是

          • ID 定位

          • Text 文本定位

          • Description 定位

          • ClassName 定位

          • Xpath 定位

          • 組合定位

          例如:

          #?常用的6種定位方式
          #?方式一:ID定位
          d(resourceId=元素ID).click()

          #?方式二:Text文本定位
          d(text="公眾號:AirPython").click()

          #?方式三:Description值定位
          d(description="AirPython").click()

          #?方式四:ClassName定位
          d(className="android.widget.TextView").click()

          #?方式五:Xpath定位
          d.xpath("http://*[@content-desc='AirPython']")

          #?方式六:組合定位
          d(className="android.widget.ListView",?resourceId=元素ID)

          需要指出的是,當界面屬性值不唯一的時候,組合定位就顯得很實用

          本例直接使用 ID 去找到元素,然后執(zhí)行點擊操作,跳轉(zhuǎn)到搜索界面

          #?點擊到搜索頁面
          device(resourceId="com.taobao.idlefish:id/search_bg_img_front",).click()

          4、搜索

          UiAutomator2 中提供了?send_keys()?方法,用于向輸入框中設(shè)置文本

          注意:參數(shù) clear 如果設(shè)置為 True,則在輸入內(nèi)容之前,會先清空輸入框,默認值為 False

          #?輸入內(nèi)容
          device.send_keys("Python",?clear=True)

          #?點擊搜索按鈕
          device(text="搜索").click()

          5、滑動

          UiAutomator2 提供了兩個方法用于滑動界面,分別是:

          • swipe_ext( 滑動方向 )

          • swipe( 開始 x 軸,開始 y 軸,結(jié)束 x 軸,結(jié)束 y 軸值,滑動時間 )

          經(jīng)過測試發(fā)現(xiàn),滑動操作,swipe_ext() 使用效果不穩(wěn)定,建議使用 swipe() 函數(shù)

          for?i?in?range(5):
          ????print('滑動一次')
          ????swipe_custom(device,?0.5,?0.8,?0.5,?0.2,?1.2)

          另外,為了保證兼容不同分辨率的設(shè)備,建議通過屏幕百分比自定義滑動方法

          def?swipe_custom(device,?start_x_percent,?start_y_percent,?end_x_percent,?end_y_percent,?during=1.0,?interval=1):
          ????"""
          ????自定義滑動,適配性更高
          ????:param?device:
          ????:param?start_x_percent:
          ????:param?start_y_percent:
          ????:param?end_x_percent:
          ????:param?end_y_percent:
          ????:param?during:
          ????:return:
          ????"""

          ????#?獲取屏幕的寬、高度
          ????width,?height?=?device.window_size()
          ????device.swipe(start_x_percent?*?width,?start_y_percent?*?height,?end_x_percent?*?width,?end_y_percent?*?height,
          ?????????????????during)

          ????if?interval?>?0:
          ????????sleep(interval)

          6、關(guān)閉應用

          在完成自動化操作后,就可以調(diào)用?app_stop()?方法強制關(guān)閉應用

          #?停止App
          device.app_stop(PACKAGE_NAME)

          當然,可以在每次操作完,使用 UiAutomator2 提供的方法?app_clear()?清除 App 數(shù)據(jù)

          #?清除App數(shù)據(jù)
          #?device.app_clear(PACKAGE_NAME)

          5.最后

          通過上面的實例,我們發(fā)現(xiàn)?UiAutomator2 相比 Appium,語法更簡潔易懂,代碼量也少了很多

          但是由于 Uiautomator2 僅適用于 Android 端,Appium 擁有多語言、跨平臺的特性,企業(yè)級自動化一般會選擇后者

          我已經(jīng)將文中全部源碼上傳到后臺,關(guān)注公眾號后回復「?uiauto2?」即可獲得全部源碼

          如果你覺得文章還不錯,請大家?點贊、分享、留言?下,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強動力!


          留言送書

          本周贈書:《 Django 項目開發(fā)實戰(zhàn)?
          PS:中獎名單將于下周一在交流群公布


          推薦閱讀


          帶你用 Python 實現(xiàn)自動化群控(入門篇)

          聊聊 Python 做微信小程序自動化,那些踩過的坑?

          Python 自動化,Helium 憑什么取代 Selenium?



          瀏覽 94
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产综合久久777777歌曲 | 欧美视频天天干 | 成人精品视频在线 | 99re视频在线播放 | 思思热热|