如何点击一个父控件下所有的子控件

已存档
wrekemdkwh · 20 天前
第 1 条补充
·
18 天前

如何确定子控件的父控件

第 2 条补充
·
15 天前

识别包含多个关键字的文本并且点击

回答

Hamibot AI
1
· 20 天前

要点击一个父控件下的所有子控件,可以先获取父控件,然后使用 children() 或通过 childCount()child(i) 遍历子控件,对每个子控件调用 click() 方法。

示例代码:

// 文档地址 https://docs.hamibot.com/

// 先找到父控件,例如通过 text 或 id 等属性
var parent = text("父控件文本").findOne();
// 获取所有子控件列表
var children = parent.children();
// 遍历并点击每个子控件
for (var i = 0; i < children.length; i++) {
    var child = children.get(i);
    // 部分控件可能需要先判断是否可点击,避免报错
    if (child.clickable()) {
        child.click();
    } else {
        // 若不可点击,可尝试点击其父控件或使用坐标点击
        var b = child.bounds();
        click(b.centerX(), b.centerY());
    }
    // 根据需要添加适当延时
    sleep(500);
}

如果父控件没有直接提供 children() 方法,也可以使用 childCount()child(i) 来遍历:

var parent = text("父控件文本").findOne();
for (var i = 0; i < parent.childCount(); i++) {
    var child = parent.child(i);
    if (child.clickable()) {
        child.click();
    } else {
        var b = child.bounds();
        click(b.centerX(), b.centerY());
    }
    sleep(500);
}

注意:部分控件可能无法直接点击,可通过坐标点击或点击其父控件间接实现。确保设备已授权无障碍服务权限。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 18 天前

要确定一个子控件的父控件,直接使用 parent() 方法即可。

// 文档地址 https://docs.hamibot.com/

// 先找到子控件
var child = text("子控件文本").findOne();

// 获取父控件
var parent = child.parent();
if (parent) {
    log("父控件类名:" + parent.className());
} else {
    log("该控件没有父控件");
}

如果需要向上查找多层父控件,可以连续调用 parent()

var child = text("子控件文本").findOne();
var grandparent = child.parent().parent(); // 获取父控件的父控件

这样就能根据需要确定控件在层级结构中的位置。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 15 天前

在 Hamibot 中,可以使用正则表达式或 textContains() 链式调用来匹配包含多个关键字的文本控件。

方法一:使用正则表达式(推荐)

// 文档地址 https://docs.hamibot.com/

// 匹配包含"关键字1"或"关键字2"的文本
var target = textMatches(/.*关键字1.*|.*关键字2.*/).findOne();
if (target) {
    target.click();
}

// 匹配同时包含"关键字1"和"关键字2"的文本
var target = textMatches(/^(?=.*关键字1)(?=.*关键字2).*$/).findOne();
if (target) {
    target.click();
}

方法二:使用 textContains() 链式调用

// 文档地址 https://docs.hamibot.com/

// 匹配同时包含"关键字1"和"关键字2"的文本
var target = textContains("关键字1").find()
    .filter(function(w) {
        return w.text().indexOf("关键字2") >= 0;
    });
if (target.length > 0) {
    target[0].click();
}

方法三:遍历所有控件筛选

// 文档地址 https://docs.hamibot.com/

// 获取所有匹配控件的列表,筛选包含多个关键字的
var nodes = textContains("关键字1").find();
for (var i = 0; i < nodes.length; i++) {
    var nodeText = nodes[i].text();
    if (nodeText.indexOf("关键字2") >= 0 && nodeText.indexOf("关键字3") >= 0) {
        nodes[i].click();
        break;
    }
}

正则表达式方式最为灵活,可根据实际需求调整匹配逻辑。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实