跳到主要内容

ID约束 (Selector.id)

Selector.id

声明

node.selector():id(resource_id)

参数

参数类型说明
resource_idstring控件的 resource-id,支持正则表达式

返回值

类型说明
Selector选择器对象(支持链式调用)

说明

通过 resource-id 属性约束控件。

什么是 resource-id:

  • Android 开发者在布局文件中为控件定义的唯一标识符
  • 格式通常为 包名:id/控件名,如 com.example:id/btn_login
  • 是定位控件最精确、最稳定的方式之一

匹配规则:

  • 默认支持正则表达式匹配
  • 完整匹配:id("com.example:id/btn_login")
  • 部分匹配:id(".*btn_login")id(".*login.*")
  • 仅匹配控件名:id("btn_login") (不含包名时自动模糊匹配)

适用场景:

  • 定位有明确 ID 的控件(推荐首选方式)
  • 同类型控件需要精确区分时
  • 控件文本可能变化但 ID 固定时

注意事项:

  • 部分控件没有 resource-id(值为空)
  • 某些 APP 会动态生成 ID,每次启动可能不同
  • 可通过 node.dump() 或开发者工具查看控件的实际 ID
  • 建议优先使用 ID 定位,其次考虑 text、desc 等属性
待实现

该接口正在开发中。

示例

local node = require("node")

-- 完整 ID
local n = node.selector():id("com.example:id/search_bar_text"):find()

-- 正则匹配
local n = node.selector():id(".*search.*"):find()

AScript 对应

# AScript (Python)
from ascript.android.node import Selector

node = Selector().id("com.aojoy.airscript:id/search_bar_text").find()