相对位置与 bounds 选择器——父子兄弟关系定位
bounds(屏幕区域)
按控件在屏幕上的矩形位置匹配:
// 控件左上角在 (0, 1000) 到 (1080, 1500) 区域内
bounds(0, 1000, 1080, 1500).click();
参数是 left, top, right, bottom(像素坐标)。常用于 APP 界面上半部分和下半部分有相似按钮时的区分。
实用场景
// 只匹配屏幕底部区域的按钮(排除顶部导航栏里的同名按钮)
className("Button")
.bounds(0, 1800, 1080, 2400)
.click();
父子关系
找父控件
// 找到包含「购买」按钮的容器,再从容器里找价格文本
var container = text("购买").findOne().parent();
var price = container.findOne(id("price_tag"));
在某控件内找子控件
// 找到页面主容器后,只在它里面搜索,不找导航栏里的同名按钮
var mainContainer = id("main_content").findOne();
mainContainer.findOne(text("确定")).click();
depth(层级深度)
// 只匹配深度 ≤ 3 的控件(排除深层嵌套的)
text("签到").depth(3).click();
兄弟与索引
index(索引)
// 第二个 Button 控件(从 0 开始)
className("Button").index(1).click();
sibling 系列
var btn = text("购买").findOne();
// 找它前面的兄弟控件
var prev = btn.prev();
// 找它后面的兄弟控件
var next = btn.next();
// 它在兄弟中的位置
var pos = btn.indexInParent();
visible(可见性)
// 只匹配当前可见的控件
text("签到").visible(true).click();
某些控件虽然存在于控件树中但被设为 GONE 或 INVISIBLE,visible(true) 可以排除它们。
enabled / clickable
// 只匹配可点击、已启用的控件
text("确定")
.clickable(true)
.enabled(true)
.click();
这样可以避开灰色的、不可操作的禁用按钮。
综合示例
// 淘宝:在商品卡片区域内,找到价格下方的「加入购物车」按钮
var price = id("com.taobao.taobao:id/tv_price").findOne();
var cartBtn = price.parent().findOne(textContains("加入购物车"));
cartBtn.click();