前言:
定位元素:Appium有兩種方式
1.Appium Inspector
2.uiautomatorviewer
一、Appium Inspector
1、設置 Android Settings
2、啓動 Appium
3、啓動Inspector
4、會遇到的異常:
a.每次啓動都會給你手機上重新安裝一次應用
b.不能用鼠標指定某個元素
c.不能重複刷新,頁面實時更新差
一般不建議使用這個元素定位工具。
二、uiautomatorviewer
1、下載uiautomatorviewer
下載安裝好SDK後,其實自帶了uiautomatorviewer,在tools工具下:
2、啓動uiautomatorviewer
雙擊uiautomatorviewer,並點擊左上角的手機ico,刷新
3、可以根據鼠標在視圖指定元素
a.左邊爲界面視圖
b.右上邊是元素菜單樹
c.右下邊是每個元素的屬性
4、webdriver提供的11種元素定位方法
可以再pycharm上輸入driver.find_element_by自動匹配出來
三、通過屬性定位元素
這裏使用uiautomatorviewer獲取元素,通過id,name.class屬性定位
1、id定位
格式:driver.find_element_by_id("resource-id")
driver.find_element_by_id("com.hundsun.stockwinner.grzq:id/ninecase")
2、name定位
格式:driver.find_element_by_name("text")
driver.find_element_by_name("系統設置")
這裏出現亂碼,還有部分元素name是會變的。所以name 定位元素不準確
3、class定位
格式:driver.find_element_by_class_name("class屬性")
driver.find_element_by_class_name("android.widget.Button")
class元素不是唯一,所以單獨以class定位也是不準確的。
上面爲元素的定位。
三、通過Xpath來定位
1、有id和name的情況
a.可以直接通過上面的元素定位法來定位 driver.find_element_by_id("resource-id")。如果有id或name不唯一,可以通過加下標[1][2]來定位。如:
driver.find_element_by_id('com.wlqq:id/title_left_btn')[1]
b.可通過xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])。如果同樣有id或name不唯一,也可通過加下標[1][2]來定位。如:
xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])[1]
下標表示的是同類的第幾個,不是前面位置的數字。座標前用括號括起來。
2、沒有id和name的情況
a.絕對路徑:
例子:
要定位ImageButton[600,50][720,150] 這裏有七級,絕對路徑需從第一級一級一級找。
xpath= //android.widget.LinearLayout
/android.widget.FrameLayout
/android.widget.LinearLayout
/android.widget.RelativeLayout
/android.widget.RelativeLayout
/android.widget.LinearLayout[2]
/android.widget.ImageButton
b.相對路徑:
相對路徑可以通過距離 需要定位的位置 最近並且很容易準確定位的控件 來參照。一般用text爲不變的或唯一值 id。
兄弟關係:
preceding-sibling:: 找到當前節點前面節點 也就是哥哥節點,following-sibling::找當前節點後面節點 也就是弟弟節點
父子關係:
parent:: 或 ..
例子:
通過TextView:錢包,當做軸點,參照節點。兄弟關係:
xpath=//android.widget.TextView[@text="錢包"]
/following-sibling::android.widget.LinearLayout
/android.widget.ImageButton
父子關係:
xpath=//android.widget.TextView[@text="錢包"]
/parent::android.widget.RelativeLayout
/android.widget.LinearLayout[2]
/android.widget.ImageButton
或
xpath=//android.widget.TextView[@text="錢包"]
/..
/android.widget.LinearLayout[2]
/android.widget.ImageButton