脚本开发指导

矩媒AI 带来最新的海外社媒矩阵洞察与实战策略

2023-04-21 382 阅读 0 评论
脚本开发指导

一.全局

waitForPackage(package[, period = 200])//等待指定的应用出现。

waitForPackage("com.tencent.mm")//例如等待当前界面为微信waitForActivity(activity[, period = 200])//等待指定的Activity出现,period为检查Activity的间隔。waitForActivity("com.ss.android.ugc.aweme.following.ui.FollowRelationTabActivity")//等待抖音其他用户的关注列表页面出现:

sleep(n)//毫秒数

log("message")//打印日志

toast("message")//气泡提示

toastLog("message")//打印日志并气泡提示setClip("text")//设置剪贴板内容exit()//立即停止脚本运行random(min, max)//随机数

二.应用(App)

launch("包名")//通过包名启动应用

launchPackage("包名")//通过包名启动应用

launchApp(appName)//通过名称启动应用

getPackageName(appName)//获取应用名称对应的已安装的应用的包名

getAppName("包名")//获取应用包名对应的已安装的应用的名称

app.openAppSetting("包名")//打开应用的详情页(设置页)。返回false; 否则返回true(全局)

app.editFile("/sdcard/1.txt/);//用其他应用编辑文件文本文件

app.uninstall("app.uninstall("com.tencent.mobileqq");//卸载应用 app.openUrl("包名");//浏览器打开网站,Url,如果不以"http://"或"https://“开头则默认是"http://”

三.坐标

setScreenMetrics(width, height)在width*height的设备中,坐标操作自适应width {number} //屏幕宽度,单位像素height {number} //屏幕高度,单位像素click(x, y)//点击longClick(x, y)//长按press(x, y, duration)//按住swipe(x1, y1, x2, y2, duration)//滑动swipeEx(x1, y1, x2, y2, duration)//仿真随机曲线滑动gesture(duration, [x1, y1], [x2, y2], …)//手势路径,时长2sgestures([delay1, duration1, [x1, y1], [x2, y2], …], [delay2, duration2, [x3, y3], [x4, y4], …], …)//延时多点手势路径

四.控件

①.文本控件

setText([i, ]text)//输入框的文本置为text//返回是否输入成功。当找不到对应的文本框时返回false。//i表示i + 1个输入框

input([i, ]text)//输入框文本追加内容text//返回是否输入成功。当找不到对应的文本框时返回false。//i表示i + 1个输入框

click(text[, i])//点击大部分包含文字的按钮

while(!click("扫一扫"));//通常与while同时使用以便点击按钮直至成功longClick(text[, i]))//长按文本

②.滑动控件

scrollUp([i])//找到第i+1个可滑动控件上滑或左滑。

scrollDown([i])//找到第i+1个可滑动控件下滑或右滑className("ImageView").depth(10).findOne().click()//多条件定位点击

③.方形控件

Rect//UiObject.bounds(), UiObject.boundsInParent()返回的对象。//表示一个长方形(范围)。

Rect.left//长方形左边界的x坐标

Rect.right//长方形右边界的x坐标

Rect.top//长方形上边界的y坐标

Rect.bottom//长方形下边界的y坐标

Rect.centerX()//长方形中点x坐标

Rect.centerY()//长方形中点y坐标

Rect.width()//长方形宽度。通常可以作为控件宽度

Rect.height()//长方形高度。通常可以作为控件高度

device.width来获取屏幕宽度

device.height来获取屏幕高度

Rect.contains(Rect)//返回是否包含另一个长方形r。包含指的是,长方形r在该长方形的里面(包含边界重叠的情况)。

Rect.intersect(Rect)//返回是否和另一个长方形相交。

五.选择器进阶

UiSelector.text(str)//text控件

strUiSelector.textContains(包含)//包含

UiSelector.textStartsWith(前缀)//前缀

UiSelector.textEndsWith(后缀)//后缀

UiSelector.textMatches(正则)//正则

UiSelector.desc(str)//desc控件

strUiSelector.descContains(前缀)//前缀

UiSelector.descStartsWith(prefix)//

UiSelector.descEndsWith(suffix)//

UiSelector.descMatches(正则)//正则

UiSelector.id(str)//id控件

strUiSelector.idContains(包含)//包含

UiSelector.idStartsWith(前缀)//前缀

UiSelector.idEndsWith(后缀)//后缀

UiSelector.idMatches(正则)//正则

UiSelector.className(str)//className控件

strUiSelector.classNameContains(包含)包含UiSelector.classNameStartsWith(前缀)//前缀UiSelector.classNameEndsWith(后缀)//后缀UiSelector.classNameMatches(正则)为正则UiSelector.packageName(str)packageName控件strUiSelector.packageNameContains(包含)包含UiSelector.packageNameStartsWith(前缀)//前缀UiSelector.packageNameEndsWith(后缀)//后缀

UiSelector.packageNameMatches(正则)//正则(左边距;上边距;下边距;右边距)

UiSelector.bounds(left, top, right, buttom)//定位控件的bounds属性为屏幕上显示的范围。

UiSelector.boundsInside(left, top, right, buttom)在参数构成的范围里面查找符合条件的控件。用于限制选择器在某一个区域选择控件。

UiSelector.boundsContains(left, top, right, buttom)在参数构成的范围里面查找符合条件的控件。用于限制控件的范围必须包含所给定的范围。UiSelector.drawingOrder(number)//为一个控件在父控件中的绘制顺序,通常可以用于区分同一层次的控件。为当前选择器附加控件"drawingOrder等于order"的条件。UiSelector.clickable([b = true])为当前选择器附加控件是否可点击的条件。类名为android.view.View的控件大多可点击

UiSelector.longClickable([b = true])为当前选择器附加控件是否可长按的条件。

UiSelector.checkable([b = true])为当前选择器附加控件是否可勾选的条件。UiSelector.selected([b = true])为当前选择器附加控件是否已选中的条件。UiSelector.enabled([b = true])为当前选择器附加控件是否已启用的条件。UiSelector.scrollable([b = true])为当前选择器附加控件是否可滑动的条件。可以用这个条件来寻找可滑动控件来滑动界面。

UiSelector.editable([b = true])为当前选择器附加控件是否可编辑的条件;一般来说可编辑的控件为输入框(EditText)但不是所有

UiSelector.multiLine([b = true])为当前选择器附加控件是否文本或输入框控件是否是多行显示的条件。

UiSelector.findOne()对屏幕上的控件进行搜索,找不到控件,当屏幕内容发生变化时会重新寻找,直到屏幕上出现并返回该控件。未出现则阻塞

UiSelector.findOne(timeout)毫秒的时间内没有找到终止搜索并返回null

UiSelector.findOnce()对屏幕上的控件进行搜索,只找一次;返回第1个符合条件的控件;否则返回null

UiSelector.findOnce(i)对屏幕上的控件进行搜索,只找一次;返回第 i + 1 个符合条件的控件;否则返回null

UiSelector.find()对屏幕上的控件进行搜索,找到所有满足条件的控件集合并返回。只进行一次empty()函数判断找到的是否为空

UiSelector.untilFind()对屏幕上的控件进行搜索,直到找到至少一个满足条件的控件为止,并返回所有满足条件的控件集合。

UiSelector.exists()判断屏幕上是否存在控件符合选择器所确定的条件;一般搭配if使用UiSelector.waitFor()等待屏幕上出现符合条件的控件;在满足该条件的控件出现之前,该函数会一直保持阻塞。

UiSelector.filter(f)为当前选择器附加自定义的过滤条件。

六.UiSelector选择器

①控件属性

className 类名。类名表示一个控件的类型,例如文本控件为"android.widget.TextView", 图片控件为"android.widget.ImageView"等。
packageName 包名。包名表示控件所在的应用包名,例如QQ界面的控件的包名为"com.tencent.mobileqq"。
bounds 控件在屏幕上的范围。
drawingOrder 控件在父控件的绘制顺序。
indexInParent 控件在父控件的位置。
clickable 控件是否可点击。
longClickable 控件是否可长按。
checkable 控件是否可勾选。
checked 控件是否可已勾选。
scrollable 控件是否可滑动。
selected 控件是否已选择。
editable 控件是否可编辑。
visibleToUser 控件是否可见,可以筛选在屏幕可视范围内的组件。
enabled 控件是否已启用。
depth 控件的布局深度。

②.控件类型

android.widget.TextView//文本控件

android.widget.ImageView//图片控件

android.widget.Button//按钮控件

android.widget.EditText//输入框控件

android.widget.AbsListView//列表控件

android.widget.LinearLayout//线性布局

android.widget.FrameLayout//帧布局

android.widget.RelativeLayout//相对布局

android.widget.RelativeLayout//相对布局android.support.v7.widget.RecyclerView//通常也是列表控件

七.选择器操作

exits() 判断控件是否存在

waitFor() 等待控件出现

UiObject.click()//点击该控件,并返回是否点击成功。

UiObject.longClick()//长按该控件,并返回是否点击成功。

UiObject.setText(text)//设置输入框控件的文本内容,并返回是否设置成功。UiObject.copy()//对输入框文本的选中内容进行复制,并返回是否操作成功。UiObject.cut()//对输入框文本的选中内容进行剪切,并返回是否操作成功。UiObject.paste()//对输入框控件进行粘贴操作,把剪贴板内容粘贴到输入框中,并返回是否操作成功。

UiObject.setSelection(start, end)//对输入框控件设置选中的文字内容,并返回是否操作成功。

UiObject.scrollForward()//对控件执行向前滑动的操作,并返回是否操作成功。UiObject.scrollBackward()//对控件执行向后滑动的操作,并返回是否操作成功。UiObject.select()//对控件执行"选中"操作,并返回是否操作成功。"选中"和isSelected()的属性相关

UiObject.collapse()//对控件执行折叠操作,并返回是否操作成功。UiObject.expand()//对控件执行操作,并返回是否操作成功。

UiObject.show()//对集合中所有控件执行显示操作,并返回是否全部操作成功。UiObject.scrollUp()//对集合中所有控件执行向上滑的操作,并返回是否全部操作成功。UiObject.scrollDown()//对集合中所有控件执行向下滑的操作,并返回是否全部操作成功。UiObject.scrollLeft()//对集合中所有控件执行向左滑的操作,并返回是否全部操作成功。UiObject.scrollRight()//对集合中所有控件执行向右滑的操作,并返回是否全部操作成功。children()//返回该控件的所有子控件组成的控件集合。可以用于遍历一个控件的子控件childCount()//返回子控件数目。parent()//返回该控件的父控件。如果该控件没有父控件,返回null。bounds()//返回控件在屏幕上的范围,其值是一个Rect对象。boundsInParent()//返回控件在父控件中的范围,其值是一个Rect对象。drawingOrder()//返回控件在父控件中的绘制次序。id()//获取控件的id,如果一个控件没有id,则返回null。text()//获取控件的文本,如果控件没有文本,返回""。findByText(str)//根据文本text在子控件中递归地寻找并返回文本或描述(desc)包含这段文本str的控件,返回它们组成的集合。findOne(selector)//根据选择器selector在该控件的子控件、孙控件…中搜索符合该选择器条件的控件,并返回找到的第一个控件;如果没有找到符合条件的控件则返回null。find(selector)//根据选择器selector在该控件的子控件、孙控件…中搜索符合该选择器条件的控件,并返回它们组合的集合。UiCollection//控件集合, 通过选择器的find(), untilFind()方法返回的对象。UiCollection.size()//返回集合中的控件数。历史遗留函数,相当于属性length。UiCollection.get(i)//返回集合中第i+1个控件(UiObject)。历史遗留函数,建议直接使用数组下标的方式访问元素。UiCollection.each(func)//遍历集合。历史遗留函数,相当于forEach。参考forEach。empty()//返回控件集合是否为空。nonEmpty()//返回控件集合是否非空。UiCollection.find(selector)//根据selector所确定的条件在该控件集合的控件、子控件、孙控件…中找到所有符合条件的控件并返回找到的控件集合。UiCollection.findOne(selector)//根据选择器selector在该控件集合的控件的子控件、孙控件…中搜索符合该选择器条件的控件,并返回找到的第一个控件;如果没有找到符合条件的控件则返回null。

八.模拟按键

back()返回
home()Home键
recents()显示最近任务。
powerDialog()电源键菜单
notifications()拉出通知栏。
quickSettings()显示快速设置(下拉通知栏到底)。
splitScreen()分屏。

示例:

①.一般排序

id("recent_chat_list").className("AbsListView").findOne().scrollForward();

②.在屏幕上半部分寻找文本控件TextView

var w = className("TextView").boundsInside(0, 0, device.width, device.height / 2).findOne();
log(w.text());

③.findOne设置延时寻找控件

//启动Auto.jslaunchApp("Auto.js");//在6秒内找出日志图标的控件

var object = id("action_log").findOne(6000);//如果找到控件则点击if(object != null){object.click();}else{//否则提示没有找到toast("没有找到日志图标");}

④.findOnce

let object = text("抖音号").findOnce()

    log(object)

if (object != null) {

    log("已找到")

} else {

    log("Error:未找到")

}

⑤.findOnce()

object = text("在线").findOnce();

if (object != null) {

    log(object.parent().parent().click()) //点击元素

}else {

    //错误处理

};

⑥.setText

//刷屏-------------------

while(true){

    className("EditText").findOne().setText("刷屏...");

    text("发送").findOne().clicK();

    sleep(500); 

}

或者

while(true){

    className("EditText").setText("刷屏...");

    text("发送").clicK();

    sleep(500);

}

⑦.App

//启动APP------

if (currentPackage() != "com.chaoxing.mobile") {

//是否不在APP界面toast("即将打开超星!");

//直接打开学习通app.launchApp("学习通");

//不在则打开} else {

//否则就是在页面

toast("已经在学习通中,即将开始进行下一步操作!");

//不执行操作

};

//强制停止应用------

"auto";

var appName = rawInput("请输入应用名称");

openAppSetting(getPackageName(appName));

while(!click("强制停止"));

⑧.发送意图

//发送意图-文本消息分享------

var content = rawInput('请输入要分享的文本');

app.startActivity({action: "android.intent.action.SEND",type: "text/*",extras: {"android.intent.extra.TEXT": content},packageName: "com.tencent.mobileqq",className: "com.tencent.mobileqq.activity.JumpActivity"});

⑨.事件监听

events.onKeyDown(keyName, listener); 

// keyName:要监听的按键名称,

listener:按键监听器- volume_up 音量上键- volume_down 音量下键- home 主屏幕键- back 返回键- menu 菜单键举个例子:

//启用按键监听

events.observeKey();

//监听"主屏幕键按下

events.onKeyDown("home", function(event){ 

    toast("主屏幕键被按下了");

});

//监听返回键按下

events.onKeyDown("back", function(event){ toast("返回键被按下了"); exit();});

events.onKeyUp(keyName, listener); 

// keyName:要监听的按键名称,

listener:按键监听器 举个例子:

//启用按键监听events.observeKey();

//监听音量下键弹起

events.onKeyDown("volume_down", function(event){ 

    toast("音量上键弹起");

});

//监听Home键弹起

events.onKeyDown("home", function(event){ 

    toast("Home键弹起"); 

    exit();

});

⑩.悬浮窗

floaty.window(layout);

// 指定悬浮窗的布局,创建并显示一个悬浮窗举个例子:

var w = floaty.window( <frame gravity="center"> <text id="text">悬浮文字</text> </frame>);

setInterval(() => { }, 1000);

floaty.rawWindow(layout);

// 指定悬浮窗的布局,创建并显示一个原始悬浮窗,您可以根据自己需要编写任何布局举个例子:

var w = floaty.rawWindow( <frame gravity="center"> <text id="text">悬浮文字</text> </frame>);

w.setPosition(500, 500); 设置悬浮窗位置。setTimeout(()=>{

w.close();

}, 2000);

①①:文件系统

files.createWithDirs(path); // 创建一个文件或文件夹并返回是否创建成功。如果文件所在文件夹不存在,则先创建他所在的一系列文件夹举个例子:
files.createWithDirs("/sdcard/新文件夹/新文件夹/新文件夹/1.txt");files.exists(path); // 返回在路径path处的文件是否存在。举个例子:log(files.exists("/sdcard/新文件夹/新文件夹/新文件夹/1.txt"));files.read(path[, encoding = "utf-8"]); // 读取文本文件path的所有内容并返回举个例子:log(files.read("/sdcard/1.txt", encoding = "utf-8"));files.write(path, text); // 把text写入到文件path中。 新的text会覆盖以前的举个例子:var text = "这是一个文件内容";// 判断是否有此文件,如果没就创建一个files.createWithDirs("/sdcard/1.txt");//写入文件files.write("/sdcard/1.txt", text);//用其他应用查看文件app.viewFile("/sdcard/1.txt");files.append(path, text); // 把text追加到文件path的末尾举个例子:var text = "追加的文件内容";files.append("/sdcard/1.txt", text);files.append("/sdcard/1.txt", text);//用其他应用查看文件app.viewFile("/sdcard/1.txt");files.copy(fromPath, toPath); // 复制文件,返回是否复制成功举个例子:
files.copy("/sdcard/1.txt", "/sdcard/Download/1.txt");files.move(fromPath, toPath); // 移动文件,返回是否移动成功也可改名举个例子:
files.move("/sdcard/1.txt", "/sdcard/Download/1.txt");files.getName(path); // 返回文件的文件名举个例子:log(files.getName("/sdcard/1.txt"));files.remove(path); // 删除文件或空文件夹,返回是否删除成功举个例子:log(files.remove("/sdcard/1.txt"));files.removeDir(path); // 删除文件夹,如果文件夹不为空,则删除该文件夹的所有内容再删除该文件夹举个例子:log(files.removeDir("/sdcard/1.txt"));files.getSdcardPath(); // 返回SD卡路径举个例子:log(files.getSdcardPath()); // 返回结果:/storage/emulated/0close(); // 关闭该文件

①②.全局函数

sleep(n); // n:暂停运行n毫秒的时间。1秒等于1000毫秒。举个例子:sleep(1000); // 暂停运行1秒

currentPackage(); // 返回正在运行的应用的包名举个例子:

log(currentPackage()); // 返回:org.procurrentActivity(); // 返回正在运行的Activity的名称举个例子:

log(currentActivity()); // 返回:org.ui.main.MainActivitytoast(message); // 以气泡显示信息message几秒举个例子:toast("你好"); // 屏幕出现 你好字样,几秒后消失

toastLog(message); // 显示信息message并在控制台中输出举个例子:

toastLog("你好"); // 屏幕和控制台同时出现 你好 字样

waitForActivity(activity]); // 

activity:等待指定的Activity出现,period:为检查Activity的间隔。举个例子:log(waitForActivity("org.ui.main.MainActivity")); 

waitForPackage(package); // 等待指定的应用出现举个例子:

waitForPackage("org.pro"); exit(); // 立即停止脚本运行。

random(min, max); // 返回一个在[min...max]之间的随机数举个例子:log(random(0, 2)); // 返回可能时0,1,2random(); // 返回一个[0,1)的随机浮点数

①③.Http

http.get(url,options,callback); // 对地址url进行一次GET请求,

option:加入请求头,callback:回调函数举个例子:

console.show();var r = http.get("www.baidu.com");

log("code = " + r.statusCode);log("html = " + r.body.string());option:

console.show();

var r = http.get("www.baidu.com", {

headers: {

'Accept-Language': 'zh-cn,zh;q=0.5',

'User-Agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11' }});

log("code = " + r.statusCode);

log("html = " + r.body.string());回调函数:

console.show();

http.get("www.baidu.com", {}, function(res, err){

if(err){ console.error(err); return;

}

log("code = " + res.statusCode);

log("html = " + res.body.string());});

http.post(url, data, options, callback); // 对地址url进行一次GET请求,data:POST数据,option:加入请求头,callback:回调函数举个例子:var url = "https://login.taobao.com/member/login.jhtml";

var username = "你的用户名";

var password = "你的密码";

var res = http.post(url, { "TPL_username": username, "TPL_password": password});

var html = res.body.string();

if(html.contains("页面跳转中")){

toast("登录成功");

}else{

toast("登录失败");

}

http.postJson(url, data, options, callback); // 以JSON格式向目标Url发起POST请求。举个例子:var url = "http://www.tuling123.com/openapi/api";

r = http.postJson(url, { key: "65458a5df537443b89b31f1c03202a80",

info: "你好啊", userid: "1",});

toastLog(r.body.string());

http.request(url, options, callback); // 对目标地址url发起一次HTTP请求____待补充Response // HTTP请求的响应。Response.statusCode // 当前响应的HTTP状态码。例如200(OK), 404(Not Found)等。Response.statusMessage // 当前响应的HTTP状态信息。例如"OK", "Bad Request", "Forbidden"。举个例子:var res = http.get("www.baidu.com");

if(res.statusCode >= 200 && res.statusCode < 300){ toast("页面获取成功!");}else if(res.statusCode == 404){ toast("页面没找到哦...");}else{ toast("错误: " + res.statusCode + " " + res.statusMessage);}Response.headers // 当前响应的HTTP头部信息。举个例子:console.show();var res = http.get("www.qq.com");console.log("HTTP Headers:")for(var headerName in res.headers){ console.log("%s: %s", headerName, res.headers[headerName]);}Response.body // 当前响应的内容Response.request // 当前响应所对应的请求Response.url // 当前响应所对应的请求URLResponse.method // 当前响应所对应的HTTP请求的方法。例如"GET", "POST", "PUT"等。

①④.图片与颜色

找图找色
images.requestScreenCapture([landscape]) // 申请截图权限(只需执行一次)举个例子://请求截图if(!requestScreenCapture()){ toast("请求截图失败"); exit();}//连续截图10张图片(间隔1秒)并保存到存储卡目录for(var i = 0; i < 10; i++){ captureScreen("/sdcard/screen_capture_" + i + ".png"); sleep(1000);}images.captureScreen() // 截图当前屏幕返回一个Image对象举个例子:// 请求横屏截图requestScreenCapture(true);// 截图var img = captureScreen();// 获取在点(100, 100)的颜色值var color = images.pixel(img, 100, 100);// 显示该颜色值toast(colors.toString(color));images.captureScreen(path); // path:截图保存路径举个例子:// 请求截图if(!requestScreenCapture()){ toast("请求截图失败"); exit();}// 截图保存在指定pathimages.captureScreen("/sdcard/DCIM/新建文件夹/1.png");// 在图片img指定区域中找到颜色和color完全相等的某个点images.findColorEquals(img, color[, x, y, width, height]); 举个例子:requestScreenCapture(); //请求截图launchApp("QQ"); // 启动QQsleep(1200); // 等待1.2秒var p = findColorEquals(captureScreen(), "#f64d30"); if(p){ toast("有未读消息");}else{ toast("没有未读消息");}举个例子:// 请求截图var 获取截图权限 = requestScreenCapture();// console.log("获取截图权限===>", 获取截图权限);// 截图屏幕图片 并放指定位置images.captureScreen("/sdcard/屏幕大图" + ".png");// 扣小图片var 读取图片 = images.read("/sdcard/屏幕大图.png"); // 读取大图var 小心心 = images.clip(读取图片, 923, 828, 109, 115); // 根据大图进行xyz裁剪images.save(小心心, "/sdcard/小心心.png"); // 将图片存储指定位置var 小图片 = images.read("/sdcard/小心心.png"); // 读取小图片// var 是否找到 = images.findImage(读取图片, 小图片); // 根据大图找小图var 是否找到 = images.findImageInRegion(读取图片, 小图片, 921, 830, 116, 113); // 根据区域找图console.log("是否找到===>", 是否找到);

①⑤.基于控件的操作

auto.waitFor(); // 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;click("小红书"); // 点击文本click("啦啦啦", 0); // 点击文本 点击第一个文本longClick("小红书"); // 长按文本longClick("啦啦啦", 0); // 长按文本 点击第一个文本scrollUp(0); // 找到上滑或左滑setText("测试"); // 输入文本 会清除input("测试一下"); // 输入文本 会追加后面var sendButton = text("小红书").findOne().click(); // 定义这个元件 根据文本sendButton.click(); // 元件点击desc("搜索").findOne().click(); // 根据desc进行点击id("action_search").findOne().click(); // 根据id进行点击className("ImageView").depth(10).findOne().click(); // 组合来完成定位click(); // 控件clickable为true,才能使用longClick(); // 控件longClickable属性为truesetText(); // 设置文本,用于编辑控件设置文本 id("search_edit_text").findOne().setText("测试");exits(); // 判断控件是否存在waitFor(); // 等待控件出现scrollForward(); // id("music_list").findOne().scrollForward(); 上滑 如果控件scrollForward属性为truescrollBackward(); // id("music_list").findOne().scrollBackward(); 下滑 scrollBackward属性为true举个例子:className("android.widget.EditText").findOne().setText("狐狸");var 搜索 = text("搜索").findOne().click();搜索.click();// 如果控件名以“android.widget.”开头 可以直接省略,例如文本控件可以直接使用className("TextView"); 常见控件的类名如下:
android.widget.TextView 文本控件
android.widget.ImageView 图片控件
android.widget.Button 按钮控件
android.widget.EditText 输入框控件
android.widget.AbsListView 列表控件
android.widget.LinearLayout 线性布局
android.widget.FrameLayout 帧布局
android.widget.RelativeLayout 相对布局
android.widget.RelativeLayout 相对布局
android.support.v7.widget.RecyclerView 通常也是列表控件UiSelector.findOne(timeout); // 对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止举个例子://启动Auto.jslaunchApp("Auto.js");//在6秒内找出日志图标的控件var w = id("action_log").findOne(6000);//如果找到控件则点击if(w != null){
 w.click();}else{ //否则提示没有找到 toast("没有找到日志图标");}UiSelector.findOnce(i); // 对屏幕上的控件进行搜索,如果找到符合条件的控件则返回该控件 i:索引UiSelector.find(); // 找出所有满足条件的控件并返回一个控件集合举个例子:var c = className("AbsListView").find();if(c.empty()){ // empty() 返回控件集合是否为空 toast("找到啦");}else{ toast("没找到╭(╯^╰)╮");}UiSelector.untilFind(); // 对屏幕上的控件进行搜索,直到找到至少一个满足条件的控件为止 没找到会一直卡在那儿UiSelector.exists(); // 判断屏幕上是否存在控件举个例子:if(text("某个文本").exists()){ //要支持的动作 toast("这是某个文本");}UiSelector.waitFor(); // 等待屏幕上出现符合条件的控件举个例子:textContains("退出").waitFor(); // textContains(str) 为当前选择器附加控件"text需要包含字符串str"的筛选条件click("退出");UiSelector.filter(f) // 为当前选择器附加自定义的过滤条件。举个例子:// 要找出屏幕上所有文本长度为10的文本控件的代码为:var uc = className("TextView").filter(function(w){ return w.text().length == 10;});UiObject.click(); // 点击该控件 需要控件的clickable为true才可使用UiObject.longClick(); // 长按该控件 需要控件的longClickable为true才可使用UiObject.setText(text); // 设置输入框控件的文本内容 需要控件的editable为true才可使用UiObject.copy(); // 对输入框文本的选中内容进行复制 该函数只能用于输入框控件,并且当前输入框控件有选中的文本举个例子:var et = className("EditText").findOne();//选中前两个字et.setSelection(0, 2); // setSelection() 设置输入框选中的内容//对选中内容进行复制if(et.copy()){ toast("复制成功");}else{ toast("复制失败");}