移動端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
點選獲取更多資訊