原文:https://blog.c12th.cn/archives/37.html
选择器 UiSelector
笔记
直接分析
用于简单、最直接的查找控件
-
开启悬浮窗权限
-
点击 布局分析
-
布局范围分析
-
选择一个值, 查看控件信息
-
当前选择值的 类名
这里在主页 演示
层次分析
用于查找多层、嵌套的控件
-
布局层次分析
-
选择最外层节点, 查看控件信息
-
最外层节点的 类名
这里在主页演示,可以看出在不同的页面,最外层节点的类名是一样的
代码分析
用于查找没有直接显示、嵌套较深的控件
从层次分析,得出在不同的页面,两者最外层节点的类名是一样的。
所以我们可以优先查找最外层的 类名className(“android.widget.FrameLayout”)
var node1 = className("android.widget.FrameLayout").findOnce();
log(node1);
为了方便截图就用输出窗口了
然后我们再查找 包名
packageName(“com.tencent.mm”)
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);
});
筛选常用的四种属性:
text
、desc
、id
、className
属性 | 类型 |
---|---|
text | 文本 |
desc | 描述 |
id | 标识号 |
className | 类名 |
text()
属性
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()
属性
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()
属性
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()
属性
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());
}
});