標籤:view http 精確 style lin switch eid navig 設定
如何理解uiautomator裡面的 child, child_by_text, sibling,我們藉助android原生的uiautomatorviewer抓取的控制項來進行理解
以如進行詳細講解(左邊與右邊的通過不同顏色進行圈起來,表示了這些控制項的歸屬關係),例如紅圈部分為一個父類,投影綠圈和黃圈均為它的子類(稱為child),而綠圈和黃圈屬於同層級關係,則可以理解為兄弟關係(稱為sibling)
比如要點擊“Navigation bar hide”的開關進行開啟或者關閉,則代碼為:
1 d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Adaptive brightness‘,className = ‘android.widget.RelativeLayout‘).sibling(resourceId = ‘android:id/switch_widget‘).click()
按照代碼從左往右執行的順序,先找到父類的className,這時你會發現在該介面介面有很多個這樣的控制項,沒辦法進行唯一認定,然後再尋找該父類中的子類className精確的進行定位菜單選項,會發現其它父類中的子類也全部是一樣,也還是沒有辦法進行唯一認定,然後就再加上子類中的某一個標題(這個是唯一的),所以這就需要使用 .child_by_text 的方法來進行定位選項,找到該選項後要對該選項進行開關操作,又因為該 child_by_text的子類跟所要點擊的開頭控制項是是兄弟關係,所以就可以通過 .sibling方法進行進一步的精確定位。
a、className = ‘android.widget.LinearLayout‘ :這個是父類
b、className = ‘android.widget.RelativeLayout‘ :這個是a步驟的子類,但跟d步驟同為兄弟關係
c、‘Adaptive brightness‘ :這個是b步驟的子類
d、resourceId = ‘android:id/switch_widget‘ 這個是a步驟的子類,但跟b步驟同為兄弟關係
總結:該代碼使用情境是在Android某一個介面中(比如設定介面),裡面有多個選項要進行開關操作,就需要用到該方法,不然你無法操作其它開關選項。
下面附上對該設定介面中兩個開關進行操作的源碼:
1 #-*- coding:utf-8 -*- 2 ‘‘‘ 3 Created on 2018年7月27日 4 5 @author: any 6 ‘‘‘ 7 from uiautomator import device as d 8 while True: 9 if d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Navigation bar hide‘,className = ‘android.widget.RelativeLayout‘).sibling(resourceId = ‘android:id/switch_widget‘):10 d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Navigation bar hide‘,className = ‘android.widget.RelativeLayout‘).sibling(resourceId = ‘android:id/switch_widget‘).click()11 else:12 d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Navigation bar hide‘,className = ‘android.widget.RelativeLayout‘).sibling(resourceId = ‘android:id/switch_widget‘).click()13 if d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Adaptive brightness‘,className = ‘android.widget.RelativeLayout‘).sibling(resourceId = ‘android:id/switch_widget‘):14 d(className = ‘android.widget.LinearLayout‘).child_by_text(‘Adaptive brightness‘,className = ‘android.widget.RelativeLayout‘).sibling(className = ‘android.widget.Switch‘).click()
[python]如何理解uiautomator裡面的 child, child_by_text, sibling,及使用情境