控件查找器
from ascript.android.node import Selector
控件查找器,通过约束方法
,和查询方法
,来获取屏幕中满足条件的控件
.
方法
控件缓存
是否启用控件缓存机制.
启用后,控件将不在刷新,请及时释放缓存
启用后,查找速度将有大幅度提升.
- 函数
Selector.cache(is_cache:bool)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
is_cache | bool | 是 | True:打开缓存,缓存当前页面所有控件 False:关闭缓存 |
- 示例
# 开启缓存
from ascript.android.node import Selector
Selector.cache(True)
# 关闭控件缓存
from ascript.android.node import Selector
Selector.cache(False)
创建查找器
创建一个控件查找器
- 函数
#class
Selector(mode:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
mode | int | 否 | 检索模式 0(默认):普通检索模式,这种模式下只展示重要控件 1:复杂模式,这种模式下展示所有控件.层级会很深 2:简单模式下过滤掉系统控件. 3:复杂模式下过滤掉系统控件 |
- 示例
from ascript.android.node import Selector
# 创建一个选择器,简单模式检索
selector = Selector()
from ascript.android.node import Selector
# 创建一个选择器 ,复杂模式检索
Selector(1)
from ascript.android.node import Selector
# 创建一个选择器 ,简单模式,并且过滤掉系统控件
Selector(0|2)
from ascript.android.node import Selector
# 创建一个选择器 ,复杂模式,并且过滤掉系统控件
Selector(1|2)
查找控件一个
查找控件,返回一个满足条件的控件
- 函数
#class
Selector(mode:int).find()
- 返回值
Node 控件对象
- 示例
#案例:查找出符合条件的第一个控件
from ascript.android.node import Selector
node = Selector().find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
查找控件全部
查找控件,返回满足条件的控件
- 函数
#class
Selector(mode:int).find_all(num:int=999999)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
num | int | 否 | 控件结果最大数量 默认:满足条件的所有 |
- 返回值
Node[] 控件对象列表
- 示例
#案例:查找出所有符合条件的控件
from ascript.android.node import Selector
nodes = Selector().find_all()
if nodes:
#找到了一组控件
print( len(nodes) )
else:
print('没有找到任何控件')
获取控件树
获取完整的控件树,返回Json树状格式
- 函数
#class
Selector.dump(mode:int=0)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
mode | int | 否 | 检索模式 0(默认):普通检索模式,这种模式下只展示重要控件 1:复杂模式,这种模式下展示所有控件.层级会很深 2:简单模式下过滤掉系统控件. 3:复杂模式下过滤掉系统控件 |
- 返回值
Json 数据 ,可转换为Python字典
- 示例
#案例:获取控件树json数据,并转换为字典
import json
# 导入节点检索模块
from ascript.android.node import Selector
res = Selector.dump()
print(res) # 这是json字符串
if res:
# 转换为字典对象
obj = json.loads(res);
print(obj)
属性约束
id
通过 id
约束
- 函数
Selector().id(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件ID,支持正则表达式,通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 导包
from ascript.android.node import Selector
# 查找id值为 “com.aojoy.airscript:id/search_bar_text” 的控件
node = Selector().id("com.aojoy.airscript:id/search_bar_text").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
# 案例2: 在id约束中使用正则表达式
# 导包
from ascript.android.node import Selector
# 查找id值为 ‘search_bar_text结尾’ 的控件 ,在正则中 ‘.’代表任何值,‘*’代表出现多次,‘^’代表以什么开头,‘$’代表以什么结尾
node = Selector().id(".*search_bar_text$").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
文本
通过 text
约束
- 函数
Selector().text(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 屏幕中显示的任意文本 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例1: 在text约束中使用完整文本
# 导包
from ascript.android.node import Selector
# 查找文本为 '开发者'
node = Selector().text("开发者").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
# 案例2: 在text约束中使用正则匹配 所有文本中包含 'AirScript' 的控件
# 导包
from ascript.android.node import Selector
# 查找 文本 中包含 了‘IP’ 的控件
nodes = Selector().text(".*IP.*").find_all()
if nodes:
#找到了控件
print( len(nodes))
else:
print('没有找到任何控件')
类型
通过 type
约束
- 函数
Selector().type(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件的类型 如:TextView, ListView 等等 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出 所有类型为 TextView 的控件
# 导包
from ascript.android.node import Selector
# 约束 type 为“TextView”
nodes = Selector().type("TextView").find_all()
if nodes:
#找到了控件
for node in nodes:
print(node)
else:
print('没有找到任何控件')
描述
通过 控件描述desc
约束
- 函数
Selector().desc(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件的描述信息 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出 描述信息为 ‘这是关闭按钮’ 的控件
# 导包
from ascript.android.node import Selector
# 约束 desc 为“这是关闭按钮”
node = Selector().desc("这是关闭按钮").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
默认文本
通过控件 默认文本 hintText
约束
- 函数
Selector().hintText(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件的默认文本 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出 默认文本 包含 “小程序” 的控件
# 导包
from ascript.android.node import Selector
# 约束 hint_text 包含 “小程序” 的控件
node = Selector().hintText(".*小程序.*").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
包名
通过控件 包名 packageName
约束
- 函数
Selector().packageName(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件的所属包名 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出 包名 为 com.aojoy.airscript 的控件
from ascript.android.node import Selector
nodes = Selector().packageName("com.aojoy.airscript").find_all()
if nodes:
#找到了控件
print(nodes)
else:
print('没有找到任何控件')
路径
通过控件 路径 path
约束
- 函数
Selector().path(val:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | str正则 | 是 | 控件的路径 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出 路径 为 /FrameLayout/LinearLayout/FrameLayout/EditText 的控件
from ascript.android.node import Selector
node = Selector().path("/FrameLayout/LinearLayout/FrameLayout/EditText").find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
子控件数量
通过控件 子控件数量 childCount
约束
- 函数
Selector().childCount(val:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | int | 是 | 子控件的数量 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例1: 查找 子控件个数 为 13 的控件
# 导包
from ascript.android.node import Selector
node = Selector().childCount(13).find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
#案例2: 查找 子控件个数 为 6-7 之间, 9-13 之间的 所有
# 导包
from ascript.android.node import Selector
# 约束 desc 为“这是关闭按钮”
nodes = Selector().childCount(6.7,9.13).find_all()
if nodes:
#找到了控件
for n in nodes:
print(n)
else:
print('没有找到任何控件')
输入类型
通过控件 输入类型 inputType
约束
- 函数
Selector().inputType(val:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | int | 是 | 控件的输入类型 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找输入类型为 524289 的 控件
# 导包
from ascript.android.node import Selector
# 约束 输入类型 为1
node = Selector().inputType(524289).find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
绘制排序
通过控件 绘制排序 drawingOrder
约束
绘制排序,部分情况下会变化.请不要过度依赖该属性
- 函数
Selector().drawingOrder(val:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | int | 是 | 控件的绘制排名 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找出 绘制序列属性 为38的控件
# 导包
from ascript.android.node import Selector
# 约束 drawingOrder 属性为2的控件
node = Selector().drawingOrder(38).find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
控件深度
通过控件 控件深度 depth
约束
- 函数
Selector().depth(val:int):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | int | 是 | 控件的层级深度 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找出 绘制深度属性 为4的控件
# 导包
from ascript.android.node import Selector
node = Selector().depth(4).find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
最大文本长度
通过控件 最大文本长度 maxTextLength
约束
- 函数
Selector().maxTextLength(val:int)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | int | 是 | 控件的最大文本内容长度 通常用控件查找器获取 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找最大文本长度 限制为 5000 的 控件
# 导包
from ascript.android.node import Selector
# 约束 最大文本长度 为 50
node = Selector().maxTextLength(5000).find()
if node:
#找到了控件
print(node)
else:
print('没有找到任何控件')
是否可点击 约束
通过控件 clickable
约束
- 函数
Selector().clickable(val:bool)
- 参 数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | bool | 是 | True:可以点击 ,False:不可点击 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找出当前页面中 所有可以被点击的控件
# 导包
from ascript.android.node import Selector
# 约束 可以点击
nodes = Selector().clickable(True).find_all()
if nodes:
#找到了控件
for node in nodes:
print(node)
else:
print('没有找到任何控件')
是否可以被选中
通过控件 checkable
约束
- 函数
Selector().checkable(val:bool)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | bool | 是 | True:可被选中 ,False:不可被选中 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
#案例: 查找出当前页 面中 所有可以选中的控件
# 导包
from ascript.android.node import Selector
# 约束 可以选中
nodes = Selector().checkable(True).find_all()
if nodes:
#找到了控件
for node in nodes:
print(node)
else:
print('没有找到任何控件')
是否选中
通过控件 checked
约束
- 函数
Selector().checked(val:bool)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
val | bool | 是 | True:已选中 ,False:未选中 |
- 返回值
Selector 返回控件查找器,用于链式编程
- 示例
# 案例: 查找出当前页面中 所有已经选中的控件
# 导包
from ascript.android.node import Selector
# 约束 可以选中
nodes = Selector().checked(True).find_all()
if nodes:
#找到了控件
for node in nodes:
print(node)
else:
print('没有找到任何控件')