选择器 UiSelector

笔记

直接分析

用于简单、最直接的查找控件

  • 开启悬浮窗权限

  • 点击 布局分析

  • 布局范围分析

  • 选择一个值, 查看控件信息

  • 当前选择值的 类名

这里在主页 演示

层次分析

用于查找多层、嵌套的控件

  • 布局层次分析

  • 选择最外层节点, 查看控件信息

  • 最外层节点的 类名

这里在主页演示,可以看出在不同的页面,最外层节点的类名是一样的

代码分析

用于查找没有直接显示、嵌套较深的控件

从层次分析,得出在不同的页面,两者最外层节点的类名是一样的。
所以我们可以优先查找最外层的 类名 className(“android.widget.FrameLayout”)

1
2
var node1 = className("android.widget.FrameLayout").findOnce();
log(node1);

为了方便截图就用输出窗口了

然后我们再查找 包名 packageName(“com.tencent.mm”)

1
2
3
4
5
6
7
8
9
var node1 = className("android.widget.FrameLayout").findOnce();
// log(node1);

var nodeList = node1.find(packageName("com.tencent.mm"));
log(nodeList.size());

nodeList.forEach((child,index) => {
log(child);
});

筛选常用的四种属性: textdescidclassName

属性 类型
text 文本
desc 描述
id 标识号
className 类名
  • text() 属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var node1 = className("android.widget.FrameLayout").findOnce();
    // log(node1);

    var nodeList = node1.find(packageName("com.tencent.mm"));
    // log(nodeList.size());

    nodeList.forEach((child,index) => {
    // log(child);
    if(child.text()){
    log(child.text());
    }
    });

  • desc() 属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var node1 = className("android.widget.FrameLayout").findOnce();
    // log(node1);

    var nodeList = node1.find(packageName("com.tencent.mm"));
    // log(nodeList.size());

    nodeList.forEach((child,index) => {
    // log(child);
    if(child.desc()){
    log(child.desc());
    }
    });

  • id() 属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var node1 = className("android.widget.FrameLayout").findOnce();
    // log(node1);

    var nodeList = node1.find(packageName("com.tencent.mm"));
    // log(nodeList.size());

    nodeList.forEach((child,index) => {
    // log(child);
    if(child.id()){
    log(child.id());
    }
    });

  • className() 属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var node1 = className("android.widget.FrameLayout").findOnce();
    // log(node1);

    var nodeList = node1.find(packageName("com.tencent.mm"));
    // log(nodeList.size());

    nodeList.forEach((child,index) => {
    // log(child);
    if(child.className()){
    log(child.className());
    }
    });


最后