Autojs注意点

  • 前言
  • 一、查找控件
  • 二、等待相应
  • 三、遍历控件
  • 总结



前言

最近心血来潮想弄一个安卓脚本,搜索几番,发现了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()
}`

总结

继续更新中…………