如何查找(点击)没有id,没有text的控件?

在编写冰狐智能辅助脚本的过程中,我们经常会遇到目标控件没有id或者多个id都一样,且没有text属性,而控件的className也不是唯一的,此时要处理这类控件,如何处理这类问题呢?

一、间接寻找

通过ui树这个工具,观察目标控件附近是否有tag(id或者text)唯一的控件,如果有,则先找到该控件,然后再通过(family参数)父控件、子控件来间接找到目标控件。

// 以下两个函数功能一样
function fun1() {
    var ret = findView('txt:prod-dev');
    if (ret.length > 0) {
        var view = ret.views[0];
        // view控件的父控件的、父控件的、第二个子控件的、第一个子控件
        var targetView = view.parent.parent[1][0];

        // 处理目标
        click(targetView);
    }
}

function fun2() {
    var ret = findView('txt:prod-dev', {family:[0, 0, 2, 1]});
    if (ret.length > 0) {
        var targetView = ret.views[0];

        // 处理目标
        click(targetView);
    }
}

二、寻找所有符合条件控件

可以找到所有符合条件的控件,默认情况下findView只返回找到的第一个控件
function main() {
    var ret = findView('txt:我的', {flag: 'find_all'});
    if (ret.length > 0) {
        // 第2个为目标控件
        var targetView = ret.views[1];

        // 处理目标
        click(targetView);
    }
}

三、添加更多辅助条件

在findView函数的选项参数中可以添加clickable等参数来进一步缩小范围,也可以通过目标控件的位置来排除其他控件
function main() {
    // 通过clickable属性来缩小范围
    var ret = findView('cn:android.widget.ImageView', {flag: 'find_all|clickable'});
    if (ret.length > 0) {
        var container = ret.views;
        for (var view of container) {
            // 位置来缩小范围
            if (view.left > 100 && view.top < 30) {
                // 处理目标
                click(targetView);
            }
        }
    }
}

商务合作QQ:3765323427
Copyright © 2021-2024 冰狐智能辅助. All rights reserved. 浙ICP备15043866号 《冰狐智能辅助服务协议》