1. 程式人生 > 其它 >移動端App自動化之App控制元件定位

移動端App自動化之App控制元件定位

本文節選自霍格沃茲測試學院內部教材

客戶端的頁面通過 XML 來實現 UI 的佈局,頁面的 UI
佈局作為一個樹形結構,而樹葉被定義為節點。這裡的節點也就對應了我們要定位的元素,節點的上級節點,定義了元素的佈局結構。在 XML 佈局中可以使用 XPath
進行節點的定位。

App的佈局結構

從上面這張圖中可以看到最左側是應用的頁面的展示,中間部分展示了這個頁面的樹形結構的 XML 程式碼。

其中包含的內容為:

  • 節點 node

  • 節點屬性:包括 clickable(是否可點選)、content-desc(內容)、resource-id(元素 id)、text(文字)、bounds(座標)等。

通過ID定位

在 Android 系統元素的 ID 稱為 resource-id,使用頁面分析工具比如 Appium Inspector 能夠獲取元素的唯一標識是 ID
屬性,可以使用 ID 進行元素定位,方便快捷。

示例程式碼如下:

driver.find_element(By.ID, \"android:id/text1").click()

注意 resource-id 對應的屬性(包名:id/id 值),在使用這個屬性的時候要把它當作一個整體。
通過Accessibility定位

當分析工具能抓取到的 content-desc 的屬性值是唯一時,可以採用 Accessibility 的定位方式,示例程式碼:

driver.find_element_by_accessibility_id("Accessibility")

通過XPath定位

與 Selenium 類似,可以使用 XPath 的定位方式完成頁面的元素定位。XPath
分為絕對路徑定位與相對路徑定位兩種形式,下面介紹的都是相對定位的形式。

XPath:resource-id 屬性定位

元素可以通過 resource-id 定位。

格式://*[@resource-id='resource-id屬性']

示例程式碼:

driver.find_element(By.XPATH, \'//*[@resource-id="rl_login_phone"]')

XPath:text 屬性定位

元素可以通過 text 文字屬性定位。

格式:

//*[@text=’text文字屬性’]

示例程式碼:

driver.find_element(By.XPATH,'//*[@text="我的"]')

XPath:class 屬性定位

元素可以通過 class 定位。

格式:

//*[@class=’class 屬性’]

示例程式碼:

driver.find_element(By.XPATH,\'//*[@class="android.widget.EditText"]')

XPath:content-desc 屬性定位

元素可以通過 content-desc 定位。

格式:

//*[@content-desc='content-desc 屬性']

示例程式碼:

driver.find_element((By.XPATH,\'//*[@content-desc="搜尋"]')

uiautomatorviewer介紹

使用 Android SDK(sdk/tools/uiautomatorviewer)路徑下自帶的 uiautomatorviewer
工具也可以抓取當前頁面的元素。

提前配置 sdk/tools/路徑到環境變數 $PATH 中,直接在命令列輸入下面的命令:

uiautomatorviewer

可以開啟下面這樣一個頁面,點選頁面左上角第二個圖示(Android 手機圖示),就可以獲取下面的 uiautomatorviewer 快照圖:

uiautomatorviewer 抓取快照展示出來的元素屬性是經過解析的,我們要檢視 XML DOM 的真實結構可以列印 pagesource
,得到的內容如下,紅色框起來的部分為上圖的定位的 XML DOM 中的一個節點:

通過圖片分析,android.widget.TextView 是文字型別的節點,其中包含的屬性資訊都在上面的 uiautomatorviewer
快照圖中有展示。如果只想定位 Android 系統的頁面元素,可以直接使用
uiautomatorviewer,速度快並且不需要配置任何引數,直接點選獲取頁面的圖示就可以將客戶端頁面抓取出來。

uiautomatorviewer 只能抓取 android8 以下的版本,如果要抓取 android8 以上的版本的頁面資訊,可以使用 Appium
Inspector 或 WEditor哦~

** _
來霍格沃茲測試開發學社,學習更多軟體測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、介面自動化測試、測試框架、效能測試、安全測試、持續整合/持續交付/DevOps,測試左移、測試右移、精準測試、測試平臺開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力
QQ交流群:484590337
公眾號 TestingStudio
點選獲取更多資訊