在自动化脚本中如何查找(点击)没有id,没有text的控件?

a
Jan 3, 2025, 3:15:34 PM

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

一、间接寻找目标控件

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




如上图所示,假如我们相同“设备名:”这个控件,间接找到他右边的“feSqlg-WLZAL10”这个控件,并点击,可以使用如下代码实现:

function main() {
    //  通过family参数实现
    click('txt:设备名:', {family:[0, 2], click: true})


    // 通过直接访问控件的父控件和子控件来实现
    // var ret = findView('txt:设备名:')
    // if (ret.length > 0) {
    //     click(ret.views[0].parent[1], {click: true})
    // }
}

二、添加更多辅助条件

如果目标附近也没有明显的容易定位的其他控件,则可以通过添加更多条件来缩小范围,最终确定目标控件。比如有的广告的关闭按钮就是最典型的,即没有id也没有txt,周围附近也没有容易定位的控件。我们可以添加长和宽是否相等,是否可点击,大概位置信息(比如是否在右上角),甚至控件颜色等等。来进一步缩小控件范围,最终确定目标控件的范围

function main() {
    // 通过clickable属性来缩小范围,一定要加上find_all,找到多个然后再根据条件过滤
    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.width == view.height && view.with < 80 && view.left > 100 && view.top < 30) {
                // 处理目标
                click(targetView);
            }
        }
    }
}

三、总结

本文给出了两种解决没有id,没有text情况下,如何快速定位和点击目标控件的方法,非常适用,其思想不仅可以用于冰狐智能辅助,也可以用于其他自动化平台。

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