Selector
Selector supports below parameters. Refer to UiSelector java doc for detailed information.
-
text,textContains,textMatches,textStartsWith -
className,classNameMatches -
description,descriptionContains,descriptionMatches,descriptionStartsWith -
checkable,checked,clickable,longClickable -
scrollable,enabled,focusable,focused,selected -
packageName,packageNameMatches -
resourceId,resourceIdMatches -
index,instance
多重条件进行定位
# 定位resourceId="com.tencent.qqmusic:id/bof且index="0"
d(resourceId="com.tencent.qqmusic:id/bof",index="0").click()
child:子节点
d(resourceId="com.tencent.qqmusic:id/blw").child(index="1").child(index="1").click()
sibling:获取同级节点或者子节点的同级节点
实测发现找到第一级节点后会优先找其子节点,子节点中无符合条件结果则会寻找同级的子节点
d(resourceId="com.tencent.qqmusic:id/cyl").sibling(index="1").click()
child by text or description or instance
# get the child match className="android.widget.LinearLayout"
# and also it or its child or grandchild contains text "Bluetooth"
d(className="android.widget.ListView", resourceId="android:id/list") \
.child_by_text("Bluetooth", className="android.widget.LinearLayout")
# allow scroll search to get the child
d(className="android.widget.ListView", resourceId="android:id/list") \
.child_by_text(
"Bluetooth",
allow_scroll_search=True,
className="android.widget.LinearLayout"
)
-
child_by_descriptionis to find child which or which's grandchild contains the specified description, others are the same aschild_by_text. -
child_by_instanceis to find child which has a child UI element anywhere within its sub hierarchy that is at the instance specified. It is performed on visible views without scrolling.
See below links for detailed information:
-
UiScrollable,
getChildByDescription,getChildByText,getChildByInstance -
UiCollection,
getChildByDescription,getChildByText,getChildByInstance
Above methods support chained invoking, e.g. for below hierarchy
<node index="0" text="" resource-id="android:id/list" class="android.widget.ListView" ...>
<node index="0" text="WIRELESS & NETWORKS" resource-id="" class="android.widget.TextView" .../>
<node index="1" text="" resource-id="" class="android.widget.LinearLayout" ...>
<node index="1" text="" resource-id="" class="android.widget.RelativeLayout" ...>
<node index="0" text="Wi‑Fi" resource-id="android:id/title" class="android.widget.TextView" .../>
</node>
<node index="2" text="ON" resource-id="com.android.settings:id/switchWidget" class="android.widget.Switch" .../>
</node>
...
</node>
We want to click the switch at the right side of text 'Wi‑Fi' to turn on/off Wi‑Fi. As there are several switches with almost the same properties, so we can not use like d(className="android.widget.Switch") to select the ui object. Instead, we can use code below to select it.
d(className="android.widget.ListView", resourceId="android:id/list") \
.child_by_text("Wi‑Fi", className="android.widget.LinearLayout") \
.child(className="android.widget.Switch") \
.click()












网友评论