4、通過uiautomatorviewer實現appium元素定位
熟悉selenium自動化的小夥伴應該知道WebDriver 提供了八種元素定位方法:
id
name
class name
tag name
link text
partial link text
xpath
css selector
appium元素定位和WebDriver略微有些差異,具體差異在哪裏,下面會具體介紹,在此之前,我們先打開uiautomatorviewer.bat(在sdk/tools路徑下)
appium元素定位一:通過 Id 定位
如上圖所示resource-id 就是我們要找的 Id 了
使用方法:
driver.findElement(By.id("com.android.calculator2:id/digit_9"))
appium元素定位二:通過Class Name 定位
使用 ClassName 一般獲得的 view 都不止一個, 所以應該需要遍歷一遍得到的 views, 然後縮小搜索條件來獲得目標控件。 不推薦使用
driver.findElement(By.ClassName("android.widget.Button"));
appium元素定位三:通過XPath 定位
找父標簽的class
driver.findElement(By.xpath("android.widget.FrameLayout/android.support.v4.view.ViewPager/android.widget.Button"))
appium元素定位四:通過Accessibility ID 定位
這個方法屬於 Appium 擴展的定位方法。Accessibility ID 在 Android 上面就等同於 contentDescription。 這個屬性是方便一些生理功能有缺陷的
人使用應用程序的。 比如我們有一個 ImageView 裏面放置一張顏色復雜的圖片, 可能一些色弱色盲的人,分不清這張圖片中畫的是什麽東西。 如果用戶安裝了輔助瀏覽工具比如 TalkBack, TalkBack 就會大聲朗
讀出用戶目前正在瀏覽的內容。 TextView 控件 TalkBack 可以直接讀出裏面的內容, 但是 ImageView,TalkBack 就只能去讀 contentDescription 的值, 告訴用戶這個圖片到底是什麽。
鑒於這是一個隱藏屬性, 而 Android 上用於查找控件的各種屬性可能有所缺失或者有重復(比如 id重復, 比如一個 list 下面的所有項可能都是叫做“id/text1”) , 所以最佳的辦法就是跟開發團隊溝通好每個
view 都賦予一個唯一的 contentDescription。其實, 我們的核心是要找到元素的 contentDescription 屬性。 它就是元素的 content-desc 。
driver.findElementByAccessibilityId("加").click();
appium元素定位五:通過android uiautomator 定位
AndroidUIAutomator是一個強有力的元素定位方式,它是通過Android UIAutomator類庫去找元素,一個元素的任意屬性都可以通過 android uiautomator 方法來進行定位, 但要保證這種定位方式的唯一性。
driver.findElementByAndroidUIAutomator("new UiSelector().text(\"+\")").click();
4、通過uiautomatorviewer實現appium元素定位