基於appium的常用元素定位方法


一、元素定位工具

  app應用的元素使用的是控件定位,不同於web網頁,web網頁定位元素通常使用的是F12工具,那么在app當中我們則要借助其它的工具來輔助定位。

1.uiautomatorviewer.bat

  uiautomatorviewer.bat工具在安裝完ADT工具之后,位於ADT安裝路徑的android-sdk-windows\tools\bin目錄下

  

  雙擊啟動即可,啟動之后,在初始界面上,點擊如圖位置按鈕可以進行截屏

  

  截屏后即可查看各個元素,截屏后的效果:

  

 2.appium檢查器

  在appium啟動后的日志窗口界面,點擊“啟動檢查器會話”,會跳轉到檢查器啟動參數配置界面,參數配置直接將我們代碼里面的啟動參數搬過來就可以了。

  

   

   點擊啟動后,會根據我們配置的應用信息,自動跳轉到應用的主頁面,我們就可以開始進行元素定位了:

  

 二、常用元素定位方法

  appium從selenium中繼承了所有的元素定位方法,並且增加了自己的一些方法,我們先看看appium的源碼:

  

   但是從繼承selenium中的定位方法中,一般只會用到id、class_name、xpath這三種方法,總結起來,appium中常用的定位方法一般有以下五種:

  1. 通過id定位:resource-id
  2. 通過class_name定位:class
  3. 通過accessibility_id定位:content-desc
  4. 通過android_uiautomator定位:SDK自帶的java開發的uiautomator自動化框架
  5. 通過xpath定位

  UIAutomator介紹:     

  UIAutomator是安卓移動端的UI自動化框架,要求:Android4.3以上

  • 提供了一系列API:執行UI測試在系統或者第三方app上面
  • 允許在被測設備上執行操作,比如打開系統設置菜單
  • 適合編寫黑盒自動化測試

  UIAutomator框架的主要特點:

  1. 元素定位:UI Automator Viewer。掃描、分析待測應用的UI組件的圖像工具
  2. 元素操作:Accessing device state。在目標設備和app上各種操作
  3. 元素識別:UI Automator APIs。在多個應用程序中捕獲和操作UI組件

1.id定位

driver.find_element_by_id() 或者 MobileBy.ID

 注意這里是使用resource-id,而不是id

loc = (MobileBy.ID, 'com.taobao.taobao:id/iv_image')

2.class_name定位

driver.find_element_by_class_name() 或者 MobileBy.CLASS_NAME

 直接使用class即可

loc = (MobileBy.CLASS_NAME, 'android.widget.ImageView')

3.accessibility_id定位

driver.find_element_by_accessibility_id() 或者 MobileBy.ACCESSIBILITY_ID

 這里使用content-desc即可

loc = (MobileBy.ACCESSIBILITY_ID, '管理')

4.android_uiautomator定位

driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR

該方法的參數為UiSelector類定位元素的表達式:

new UiSelector().函數名稱('定位表達式')

實例化一個UiSelector對象,然后通過實例接口調用,具體用到的一些方法參考官網的說明,網址:https://developer.android.com/training/testing/ui-automator.html#ui-automator-viewer,該網址需要翻牆

這里調用UiSelector對象的text()方法即可,更多的方法請參考上述地址

# 注意字符串必須要用雙引號
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("去逛逛")')

5.xpath定位

driver.find_element_by_xpath() 或者 MobileBy.XPATH

 注意這里的標簽名一定是使用class來作為xpath的標簽名,在這里不同於selenium,並且遇到text文本定位的時候,使用的是text而不是text()

loc = (MobileBy.XPATH, '//android.widget.TextView[text="首頁"]')

三、組合定位

使用的是UIAumtomator下的方法,因為UiSelector類下的方法都反回了對象本身,因此可以連續調用各種方法,這種使用方法即組合定位

 我們可以連續調用三個方法進行組合

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("家裝").index(2)')

四、父子定位

調用UiSelector類的childSelector()方法,在該方法里面傳入子代的元素定位表達式

比如剛剛“家裝”的父節點屬性如下

 那么我們的定位表達式可以通過父子定位來實現

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.LinearLayout").childSelector(text("家裝"))')

五、兄弟定位

同理,我們調用fromParent()方法,表示定位同級的兄弟元素

 已知了“首頁”按鈕為本元素,text屬性為“首頁”,則通過該元素來定位“百貨元素”

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首頁").fromParent(text("百貨"))')

 


免責聲明!

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



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