选择器 (UiSelector) 作为变量 长时间运行是不是有问题?
由于脚本很多地方都要用到同一个UiSelector,所以就把他作为一个变量,脚本运行时间稍微长一点 就会出现找不到的情况,但是如果使用的不是变量 直接写UiSelector的话,就没有这个问题,这个是什么情况?
首先确保保存的本地变量类型是 UiSelector (而不是 UiObject 或 UiObjectCollection 等).
如果确实是 UiSelector, 请提供一下 UiSelector 变量的表达式.
const us = className("android.view.ViewGroup").clickable(true).indexInParent(0)
再举个例子,下面两个函数的区别,就只是一个UiSelector是变量,一个不是,运行结果就不一样,没有变量的能找到控件,有变量的就找不到控件,是我的写法有问题么?
// 找不到控件
function copyList(numList){
numList = numList || [6,7,8,9,10];
const list_selector = visibleToUser().className("android.view.ViewGroup").clickable(true).boundsInside(0, 0.3, -1, -1);
for(let i=0;i<numList.length;i++){
let o = list_selector.childCount(numList[i]).findOnce()
if(o){return {o,num:numList[i]};}
}
return null;
}
//能找到控件
function copyList(numList){
numList = numList || [6,7,8,9,10];
for(let i=0;i<numList.length;i++){
let o = visibleToUser().className("android.view.ViewGroup").clickable(true).boundsInside(0, 0.3, -1, -1).childCount(numList[i]).findOnce()
if(o){return {o,num:numList[i]};}
}
return null;
}
错在list_selector变量那里,for循环里面的list_xxx.childCount(i),会拼接成
list_xxx.childCount(0).childCount(1).childCount(2).findOnce()
而不是
list_xxx.childCount(0).findOnce()
list_xxx.childCount(1).findOnce()
list_xxx.childCount(2).findOnce()
const t =text("text").id("id")
for(let i =0;i<3;i++){
let o =t.childCount(i);
log(o);
}
//猜猜o打印的是啥😹
for(let i =0;i<3;i++){
let o =text("text").id("id").childCount(i);
log(o);
}
//再猜猜o打印的是什么😳
没错, 正如 @sucutey 所述, selector 在进行链式调用时, 是会拼接的.
let sel = text('a').desc('b');
sel.className('c');
console.log(sel); // text("a").desc("b").className("android.widget.c")