需求
在 A 界面,点击跳转到 B 界面(该界面会执行一些业务),再点击返回键出现 Dialog 弹窗,点击确认退出按钮,返回 A 界面。不断循环。
思路
一开始想到的就是按键精灵,下了 mac 版使用后发现功能太不完善,于是试了试 Windows 版,实在是操作不习惯。在搜索资料过程中了解到还可以使用 adb 来实现模拟设备操作,那肯定是写代码更顺手啊,配合使用脚本重复输入命令,就能实现简单的自动化重复操作了。
实现
模拟设备操作
常用的按钮都有特定的 keyevent 代号,例如返回键代号4(其他按键可参考文末文章中介绍),模拟返回键的点击只需要在命令行中输入 adb shell input keyevent 4
即可。
模拟点击屏幕中某点的命令是 adb shell input tap x y
,(x,y)是相应的坐标点,这就涉及到了对坐标点的计算。巧的是,正好之前写了个涂鸦的 demo (Github 地址,App 下载地址),可以使用该 demo 来调试点击的坐标点是否符合我们的期望。
不同机型分辨率不同,坐标点位置肯定是不一样的。比较理想的结果应该是我们输入固定的坐标点,然后代码里自动获取机型的屏幕密度等信息并自动转换。这里为了快速开发出这个小功能,就简单使用了最耿直的不同机型设置不同坐标的方法 ╮(╯▽╰)╭。
所以单步实现上述需求的命令就是:
1 | adb shell input tap 200 300 //点击(200,300)坐标点(假设该点就是跳转按钮所在位置) |
一次模拟进出界面的测试就完成了。
自动化
在命令行窗口输入命令便可实现单步操作,那想要自动化实现整个流程自然就是要做到自动输入命令。Shell 脚本可以实现这样的功能。后面要做的就简单了:确定需要实现的功能 –> 学习相应的 Shell 脚本语法 –> 编写脚本。
需要的功能
Shell 脚本的第一行必须为 #!/bin/bash
。使用命令:sh 脚本名.sh
运行脚本。
打印 log(时间、循环次数等)
echo
在命令行输出一段日志。例如 echo "Hello World"
。
打印当前时间:1
2time=$(date +%m-%d--%H:%M:%S)`
echo "时间:$time
####简单的交互
例如输入不同机型代号。read phoneModel
该语句会将用户的输入存储在 phoneModel
变量中,再根据变量做判断处理。使用变量在变量名前加 $
符号即可。例如:
1 | echo "What's your name?" |
定义变量
直接使用 变量名=值 方式定义。要注意变量名和值与 =
号中间不要有空格,且变量命名要符合规范:
- 首个字符必须为字母(a-z,A-Z)
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
####if else 判断
1 | echo "What's your name?" |
这里要注意 [
和]
符号前后的空格,少了空格会提示语法错误,语句最后要跟 fi
。
休眠(业务是耗时的)
sleep 5
:休眠5秒
While 循环
1 | while [ "1" = "1" ] #死循环 |
基本用得到的语法就上述这些,最后贴一下我的脚本:
1 | #!/bin/bash |