控件查找器
from ascript.ios.node import Selector
控件查找器,通过约束方法,和查询方法,来获取屏幕中满足条件的控件.
坐标与等待
控件查找器里的 xy 使用屏幕物理像素坐标;find(timeout=...) 和 find_all(timeout=...) 的 timeout 单位是 毫秒。不传或传 0 时只查一次,不会默认等待。
方法
常量
匹配模式:
| 常量 | 值 | 说明 |
|---|---|---|
Selector.MODE_EQUAL | 0 | 完全相等 |
Selector.MODE_CONTAINS | 1 | 包含 |
Selector.MODE_MATCHES | 2 | 正则匹配 |
Selector.MODE_GREATER | 3 | 大于 |
Selector.MODE_LESS | 4 | 小于 |
Selector.MODE_TRAIT | 5 | AX traits 位包含 |
查找模式:
| 常量 | 说明 |
|---|---|
Selector.SIMPLE | 默认智能模式,日常推荐,速度快 |
Selector.POINT | 点探测模式,只取指定坐标所在窗口/控件 |
Selector.COMPLEX | 复杂模式,多窗口合并,适合浮层和跨进程场景,速度较慢 |
Selector.VISIBLE | 可见控件模式,适合大列表快速检索 |
动作模式:
| 常量 | 说明 |
|---|---|
Selector.MODE_CLICK_ACCESS | 走无障碍点击 |
Selector.MODE_CLICK_XY | 点击控件中心坐标,默认 |
Selector.MODE_SCROLL_VISIBLE | 滚动到可见 |
Selector.MODE_SCROLL_LEFT / RIGHT / UP / DOWN | 指定方向滚动 |
创建查找器
创建一个控件查找器
- 函数
#class
Selector(mode=Selector.SIMPLE, xy=None, maxDepth=0, maxChildren=30, step=0)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| mode | int/str | 否 | 查找模式,默认 Selector.SIMPLE |
| xy | tuple | 否 | POINT 模式使用的坐标,如 (100, 200) |
| maxDepth | int | 否 | 控件树最大深度,0 表示不限 |
| maxChildren | int | 否 | 每个节点最多取多少个子节点,默认30;传0表示不限 |
| step | int | 否 | VISIBLE 模式网格探测步长,0表示使用默认值 |
- 示例
from ascript.ios.node import Selector
# 创建一个选择器
selector = Selector()
# 点探测:直接查坐标所在控件
node = Selector(Selector.POINT, xy=(300, 600)).find()
# 大列表:可见控件模式更快
items = Selector(Selector.VISIBLE).type("XCUIElementTypeCell").find_all()
查找一个控件
查找控件,返回一个满足条件的控件
- 函数
#class
Selector().find(timeout=None)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| timeout | int | 否 | 等待控件出现的最长时间,单位毫秒。不传或0为单次查找 |
- 返回值
Node 控件对象
- 示例
#案例:查找出符合条件的第一个控件
from ascript.ios.node import Selector
node = Selector().find()
if node:
#找到了控件
print(node)
#打印控件属性,耗时操作
print(node.info)
else:
print('没有找到任何控件')
# 最多等待 3 秒
from ascript.ios.node import Selector
node = Selector().label("登录").find(timeout=3000)
查找所有控件
查找控件,返回满足条件的控件
- 函数
#class
Selector().find_all(timeout=None)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| timeout | int | 否 | 等待至少一个控件出现的最长时间,单位毫秒。不传或0为单次查找 |
- 返回值
Node[] 控件对象列表
- 示例
#案例:查找出所有符合条件的控件
from ascript.ios.node import Selector
nodes = Selector().find_all()
if nodes:
#找到了一组控件
print( len(nodes) )
else:
print('没有找到任何控件')