跳到主要内容

获取父控件 (Selector.parent)

Selector.parent

声明

node.selector():parent()
node.selector():parent(val)
node.selector():parent(val1, val2, ...)

参数

参数类型是否必填说明
valnumber获取第 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()