如何查找(点击)没有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);
}
}
}
}