🔥Appium+python 自動化(九)- 定位元素工具 (義結金蘭的兩位異性兄弟)(超詳解)

北京-宏哥發表於2025-01-15

1.簡介

  環境搭建好了,其他方面的知識也準備的差不多了,那麼我們就開始下一步元素定位,元素定位宏哥主要介紹如何使用 uiautomatorviewer,透過定位到頁面上的元素,然後進行相應的點選等操作. 此外在介紹另一款工具:Inspector。

uiautomatorviewer 是 android-sdk 自帶的一個元素定位工具,非常簡單好用,使用 uiautomatorviewer,你可以檢查一個應用的 UI 來檢視應用的佈局和元件以及相關的屬性。

  那麼宏哥先來給各位小夥伴們介紹大哥--uiautomatorviewer,再來介紹小弟--Inspector。

2.大哥--uiautomatorviewer

  大哥人物簡介:

  大哥是皇族後裔,但是比劉皇叔強多了。人家有一個好爹--Google。

  Android 4.1 釋出的,uiautomator 是用來做 UI 測試的。也就是普通的手工測試,點選每個控制元件元素 看看輸出的結果是否符合預期。比如 登陸介面 分別輸入正確和錯誤的使用者名稱密碼然後點選登陸按鈕看看是否能否登陸以及是否有錯誤提示等。

功能性或者黑盒 UI 測試不需要測試人員瞭解程式如何實現的,只需要驗證各種操作的結果是否符合預期即可。這樣的測試可以分離團隊的開發人員和測試人員。大家各幹各的沒有太多的交集。

  常用的 UI 測試方式就是人工驗證啦,就是測試人員拿著各種手機分別安裝要測試的程式然後看看是否能正確完成各種預定的功能。但是這種驗證方式是非常耗時間的,每次迴歸都要全部驗證一邊,並且還容易出現人為錯誤。比較高效和可靠的 UI 測試方式就是自動化測試。自動化 UI 測試建立測試程式碼來執行測試任務,各種測試任務分別覆蓋不同的使用場景,然後使用測試框架來執行這些測試任務。而 uiautomator 就是你的自動化 UI 測試工具。

Android SDK 在 4.1 中提供瞭如下工具來支援 UI 自動化測試:

  • uiautomatorviewer – 一個圖形介面工具來掃描和分析應用的 UI 控制元件。
  • uiautomator – 一個測試的 Java 庫,包含了建立 UI 測試的各種 API 和執行自動化測試的引擎。

要大哥出山也就是使用該工具,需要滿足如下條件:

  • Android SDK Tools, Revision 21 or higher
  • Android SDK Platform, API 16 or higher

2.1 啟動 uiautomatorviewer.bat

兩種啟動方法:

第一種方法:

1、開啟目錄 D:\software\android-sdk-windows\tools

2、雙擊啟動,啟動之後出現如下介面


第二種方法:

1、如果不喜歡雙擊啟動的話,也可以在 cmd 裡面透過指令啟動

先 cd 到 tools 目錄下,然後輸入 uiautomatorviewer.bat 回車後啟動服務

二、連線手機

1、cmd 開啟輸入 adb devices,確認手機已連上(以夜神模擬器為例)

2、開啟手機淘寶頁面,讓螢幕處於點亮狀態

3、點左上角安卓機器人按鈕 Devices Screenshot 按鈕重新整理頁面

** **

2.2 定位元素

1、移動滑鼠到需要定位的元素上,如搜尋輸入框

** **

2、右下角可以看到元素對應的屬性

text:好沙發需要好坐墊

resource-id:com.taobao.taobao:id/home_searchedit

class:android.widget.EditText

2.3 點搜尋框

1、前面一篇啟動 app 後,休眠五秒,等待頁面載入完成

2、透過 id 來定位到搜尋框,然後點選

2.4 參考程式碼

# coding=utf-8
# 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行

# 2.註釋:包括記錄建立時間,建立人,專案名稱。
'''
Created on 2019-6-24
@author: 北京-宏哥   QQ交流群:707699217
Project:學習和使用定位元素工具
'''
# 3.匯入模組
from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android'   #android的apk還是IOS的ipa
desired_caps['platformVersion'] = '8.0'  #android系統的版本號
desired_caps['deviceName'] = '127.0.0.1:62001'    #手機裝置名稱,透過adb devices  檢視
desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
#desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的編碼方式來傳送字串
#desired_caps['resetKeyboard'] = True   #將鍵盤給隱藏起來
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #啟動伺服器地址,後面跟的是手機資訊
# 休眠五秒等待頁面載入完成
time.sleep(5)

driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()

# driver.quit()

2.5 元素定位

1、appium 的 webdriver 提供了 11 種元素定位方法,在 selenium 的基礎上擴充套件了三個,可以在 pycharm 裡面輸入 driver.find_element_by 然後會自動匹配出來

2、多的三種如下,在後面的會詳細介紹

driver.find_element_by_accessibility_id()

driver.find_element_by_android_uiautomator()

driver.find_element_by_ios_uiautomation()

(第三個是 ios 的可以暫時不用管)

3.小弟--Inspector

**   小弟人物簡介:**

  小弟不是很牛叉,但是小弟的存在必定有小弟存在的必要,之前看了好多文章都要放棄小弟,我覺地不要放棄,沒準小弟可以替大哥大哥擋刀呢,呵呵,說笑了,畢竟過河的卒子可以當車!!!

  Appium Inspector 是 appium 自帶的一個元素定位工具,前邊介紹瞭如何使用 uiautomatorviewer 進行元素定位。這裡就學習 Appium Inspector 是如何定位的。

  Appium Inspector 對於測試的同學不得不說是一個神器,可以查詢到我們需要定位的元素的 id 等各種資訊 ,還可以 錄製使用者行為,翻譯成指令碼。逆天的是可以翻譯成多種語言的指令碼。這並不意味著測試的同學可以不用學習語言和程式設計了,因為機器翻譯出的指令碼一般很難一次執行成功,其中很可能還需要經過人工修改後才能順利執行,但是這已經可以為測試指令碼的編寫帶來很大的遍歷,所以 Appium Inspector 還是值得我們去學習和使用。

3.1 設定 appium

1、先不要啟動 appium,因為啟動以後就不能操作 appium 設定介面,必須在未啟動的時候進行操作

2、點開 android setting 介面(機器人圖示)

3、勾選 Application Path,新增被測 app 的路徑

4、Devices name 處新增裝置名稱(adb devices 檢視到的)

(注意:透過這種方法也可檢視到 apk 的包名和 Launch Activity)

** **

3.2 開啟 appium

1、手機確保連線電腦(adb devices 檢視)(仍然以夜神模擬器為例)

2、點 appium 右上角三角形圖示,會啟動服務

3、這時候可以看到手機上安裝淘寶應用,並會啟動淘寶

4、點 appium 右上角的搜尋圖示

5、點 Inspector Window 介面的 Refresh 按鈕重新整理介面

3.3Ispector Window

1、手機上開啟需要單位元素的介面,然後點 Refresh 按鈕重新整理

2、左邊選單樹,可以挨個點開

3、如果想單位介面上的 “是” 和 “否” 按鈕,從選單樹就可以看到這兩個元素的結構

3.4 檢視屬性

1、選中左側選單樹對應的元素,在右下角檢視對應屬性

3.5 常見異常

1、在使用過程中,你會發現經常會報以下這個錯誤

2、每次啟動都會給你手機上重新安裝一次應用

3、並且不能用滑鼠指定某個元素,沒有 uiautomatorviewer 使用方便

(要是以上三種問題你都遇到了,怎麼辦???那就放棄吧!!!)​

相信很多人在使用過程中,都會遇到中文無法輸入問題,宏哥在後續文章裡會手把手教大家如何輸入中文。

4.小結

Android SDK 中的 UIAutomator 中本身是不支援網頁中的 UI 元素定位,下面介紹幾種常用的定位 app 內部的網頁的 UI 元素的方法。

一、使用 chrome 瀏覽器除錯移動端網頁

這是使用最多的一種方法。首頁確保自己的手機已經跟電腦連線且處於開發者模式。

   開啟PC端的谷歌瀏覽器,輸入chrome://inspect/#devices,會看到下圖所示介面:

  ![](https://image.baidu.com/search/down?url=https://images2018.cnblogs.com/blog/1063571/201803/1063571-20180301160553747-784776548.png)

 點選需要測試的網頁下方的inspect,且保證手機介面停留在那個頁面。

  ![](https://image.baidu.com/search/down?url=https://images2018.cnblogs.com/blog/1063571/201803/1063571-20180301161001325-2119759971.png)



  這樣開啟後是不是就熟悉了,點選上方紅色標記的就可以操作進行定位了~~~

** 二、Android 手機的鋪助功能帶有 TalkBack**

之前一直用的是谷歌的方法,但是最近發現使用talkback可以直接用UIAutomator定位元素。  

    Android系統一般自帶一個TalkeBack功能。但這裡千萬要注意:開啟之後整個系統的操作都變得不同了!!滑動介面需要兩個手指,單擊變成雙擊。開啟之後用UiAutomatorViewer獲取webview介面的內容,你就會發現原來webview裡面獲取不到的ui元素,現在已經可以可以獲取到了。即使現在你關掉TalkBack,也能獲取到,除非重啟手機才會回到不能獲取的狀態,所以開啟後我們可以立即關閉,以方便操作。有些手機沒有talkBack的可以去應用市場下載。

   功能路徑:
   原生系統:設定 – 輔助功能(Accessibility) – TalkBack
   華為EMUI系統:設定 – 高階設定 – 輔助功能 – TalkBack

三、宏哥在小弟哪裡遇到的問題

檢視 appium 日誌的 error 發現沒有裝置名字報錯

將夜神模擬器的名字加上就成功了

相關文章