获取父控件 (Selector.parent)
Selector.parent
声明
node.selector():parent()
node.selector():parent(val)
node.selector():parent(val1, val2, ...)
参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| val | number | 否 | 获取第 val 个父控件。默认获取所有父元素。(2)=爷爷元素,(3)=太爷爷元素,(1,3)=第1和第3个父元素,(1.3)=第1-3之间的所有父元素 |
返回值
| 类型 | 说明 |
|---|---|
| Selector | 返回控件查找器,用于链式编程 |
说明
添加父控件层级约束,用于在查找后获取匹配控件的父级控件。
工作原理:
- 先根据其他约束找到目标控件
- 然后返回目标控件的指定层级父控件
- 支持灵活的参数格式获取不同层级的父控件
参数格式详解:
- 无参数
parent()- 获取所有父控件(从直接父到根) parent(1)- 获取直接父控件parent(2)- 获取爷爷控件(父的父)parent(3)- 获取曾祖父控件parent(1, 3)- 获取第1个和第3个父控件parent(1.3)- 获取第1到第3层的所有父控件(范围)
适用场景:
- 通过子控件特征定位父容器
- 从文本标签定位到整个列表项
- 获取控件的布局容器以进行整体操作
与 Node.parent() 的区别:
selector:parent()- 是选择器的约束方法,用于查找时n:parent()- 是控件对象的方法,对已找到的控件操作
注意事项:
- 索引从 1 开始,1 表示直接父控件
- 范围语法使用小数点(如
1.3表示 1 到 3) - 多值语法使用逗号(如
1, 3表示第 1 和第 3 个)
待实现
该接口正在开发中。
示例
local node = require("node")
-- 获取指定 id 控件的所有父元素
local nodes = node.selector():id("com.example:id/search_bar_text"):parent():find_all()
-- 获取太爷爷元素
local nodes = node.selector():id("com.example:id/search_bar_text"):parent(3):find_all()
-- 获取第1和第3个父元素
local nodes = node.selector():id("com.example:id/search_bar_text"):parent(1, 3):find_all()
-- 获取往上数3辈所有元素
local nodes = node.selector():id("com.example:id/search_bar_text"):parent(1.3):find_all()
if nodes then
for _, node in ipairs(nodes) do
print(node)
end
end
AScript 对应
# AScript (Python)
from ascript.android.node import Selector
nodes = Selector().id("com.aojoy.airscript:id/search_bar_text").parent().find_all()
nodes = Selector().id("com.aojoy.airscript:id/search_bar_text").parent(3).find_all()
nodes = Selector().id("com.aojoy.airscript:id/search_bar_text").parent(1,3).find_all()
nodes = Selector().id("com.aojoy.airscript:id/search_bar_text").parent(1.3).find_all()