前言
最近心血来潮想弄一个安卓脚本,搜索几番,发现了autojs,Android7.0以上大部分功能可以免root(只需要开始无障碍服务)实现。
在此,记录一些关键点。
一、查找控件
- 查找控件时 加上
className("")
筛选条件成功率更高 - 默认的find()查找范围 我目前还不清楚。在一个很长的滑动页面中,经常会找到当前页面没有的控件,但是却点击不了,所以可以通过
UiSelector.bounds(left, top, right, buttom)
和swipe(x1, y1, x2, y2, duration)
配合使用达到精准定位。
###指定范围 查找控件,然后下滑 该范围的高度,循环往复。 - 一个LIstView中的子控件的坐标不会因为滑动而产生变化,但是在View中的子控件坐标是变化的。ListView是按照一个很长的列表窗体固定坐标的,而不是看上去的滑动窗体。
### 当要点击很长的一个LIstView中的子控件时,尽量使用获取ListView中可点击且能达到目的的子控件,然后调用Uiobject.click()
的方式 进行点击。
不要使用滑动加获取子控件坐标,然后click(x,y)
的方式
二、等待相应
- 当页面转换时,一般使用
sleep(n*1000)
来等待新页面刷新完成,但是碰到网络卡顿的情况,使用sleep(10*1000)
又过于浪费时间,可以提前找到一个刷新前没有并且仅当刷新完成后才出现的控件,使用findOne()
来查找它,利用findOne()
查找组件时阻塞的特性,界面更流畅
三、遍历控件
- 场景简述 下面的几个动态是在一个List中的,如何遍历点击他们,完成点赞、评论操作?
- 想法 首先想到的是找到这个LIst然后0-长度 遍历执行,
let List = defaultView.parent()
for (let index = 1; index < List.childCount(); index++) {
sleep(1000)
List.child(index).click()
//执行点赞,评论操作
//。。。。。。。。
sleep(1000)
back()
}
但是经实践上面方法不可行,第一个控件可以点击,但是第二个开始就会失败(没怎么学过安卓,不太懂,可能是刷新导致的)。
- 解决 提前准备for循环次数,每次点击完毕后都要重新查找,实测可行。
var List = defaultView.parent()
for (let index = 1; index < List.childCount(); index++) {
sleep(1000)
//重新查找
let List = defaultView.parent()
List.child(index).click()
//执行点赞,评论操作
//。。。。。。。。
sleep(1000)
back()
}`
总结
继续更新中…………