appium通过调用shell命令模拟按下物理键,时间可控。
2017-08-15 18:26
211 查看
如何实现长按屏幕某个坐标?
那么模拟按下物理键呢?
可是模拟长按某个物理键5秒,或者随机秒数呢?
appium内的有现成的api可以实现短按和长按物理键,adb input keyevent 命令可以实现模拟按下物理按键。不过这些方法都不能自定义按下按键的时间。
通过百度找到有前辈研究过通过adb shell模拟长按物理键: http://www.cnblogs.com/by-dream/p/5195121.html。
大概意思是手动按物理按键,同时通过getevent命令获取事件代码,如电源键代码分别是
/dev/input/event4: 0001 0074 00000001 代表按下电源键
/dev/input/event4: 0000 0000 00000000 代表事件发送完毕,执行
和
/dev/input/event4: 0001 0074 00000000 代表松开电源键。
/dev/input/event4: 0000 0000 00000000 代表事件发送完毕,执行
获取到事件代码后将代码转换为十进制。
通过sendevent命令触发事件。在cmd中输入命令以下命令实现模拟按下电源键3秒。
在appium中调用shell命令模拟按下电源键3秒:
其他物理按键,依照上述方法同样可以实现。
在appium中调用shell命令模拟按下物理键随机0至5秒:
对于屏幕上的某个坐标,模拟长按、短按,或者滑动屏幕,通过appium内的swipe()方法很容易就可以实现。
那么模拟按下物理键呢?
可以用press_keycode()和long_press_keycode()分别实现对物理键的短按和长按。
可是模拟长按某个物理键5秒,或者随机秒数呢?
去年自学时研究过模拟长按物理键,但是没有做笔记也没有写博客。昨天有人问到如何模拟按下物理按键随机秒数,回想了一下以前的实现方式作了解答,顺便分享到博客一下。
appium内的有现成的api可以实现短按和长按物理键,adb input keyevent 命令可以实现模拟按下物理按键。不过这些方法都不能自定义按下按键的时间。
通过百度找到有前辈研究过通过adb shell模拟长按物理键: http://www.cnblogs.com/by-dream/p/5195121.html。
大概意思是手动按物理按键,同时通过getevent命令获取事件代码,如电源键代码分别是
/dev/input/event4: 0001 0074 00000001 代表按下电源键
/dev/input/event4: 0000 0000 00000000 代表事件发送完毕,执行
和
/dev/input/event4: 0001 0074 00000000 代表松开电源键。
/dev/input/event4: 0000 0000 00000000 代表事件发送完毕,执行
/dev/input文件下下的event文件是与设备一一对应的(包含触摸屏、按钮、传感器等),不同设备上同一个event文件对应的设备可能不一样,比如我这里三星物理机的event4代表电源键,而模拟器上却是event0代表电源键。 在/proc/bus/input/devices文件中可以看到各个event文件对应的硬件设备是啥。 事件代码包含三个数字,如0001 0074 00000001,末尾数字为1代表按下,为0代表松开。
获取到事件代码后将代码转换为十进制。
如0001 0074 00000001转换为十进制后为1 116 1
通过sendevent命令触发事件。在cmd中输入命令以下命令实现模拟按下电源键3秒。
adb shell "sendevent /dev/input/event4 1 116 1 && sendevent /dev/input/event4 0 0 0 && sleep 3 && sendevent /dev/input/event4 1 116 0 && sendevent /dev/input/event4 0 0 0" &&在shell命令中连接多条命令,前一条命令执行完毕才会执行下一条。
在appium中调用shell命令模拟按下电源键3秒:
os.system('adb shell "sendevent /dev/input/event4 1 116 1 && sendevent /dev/input/event4 0 0 0 && sleep 3 && sendevent /dev/input/event4 1 116 0 && sendevent /dev/input/event4 0 0 0"')
其他物理按键,依照上述方法同样可以实现。
在appium中调用shell命令模拟按下物理键随机0至5秒:
os.system('adb shell "sendevent /dev/input/event4 {} && sendevent /dev/input/event4 0 0 0 && sleep {} && sendevent /dev/input/event4 {} && sendevent /dev/input/event4 0 0 0"'.format(按下事件,random.randint(0,50)/10,松开事件))
相关文章推荐
- 在windows下使用cmd命令通过adb shell自动调用android模拟或真机的InstrumentRunner进行android 自动化测试
- Android调用shell命令时间系统时间的修改
- [Android]通过adb shell input上报命令模拟屏幕点击事件【转】
- php通过exec调用shell命令导致乱码问题
- java使用ssh调用shell命令获取KVM数据(KVM需要通过libvirt管理)(二)
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
- Mysql通过system命令调用系统shell命令
- Android调用shell命令时间系统时间的修改
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
- 【Android】通过adb shell命令查看内存,CPU,启动时间,电量等信息
- [Android]通过adb shell input上报命令模拟屏幕点击事件
- linux通过awk命令,查询日志,分析数据,获取平均时间shell脚本
- shell学习七-----通过取串长度压测命令执行时间
- QT在linux环境下读取和设置系统时间(通过system来直接调用Linux命令,注意权限问题)
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
- java使用ssh调用shell命令获取KVM数据(KVM需要通过libvirt管理)
- 通过date测试shell 命令执行占用的时间
- 转载 Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
- 在linux如何在程序中调用shell命令启动另一个程序
- 如何在C语言中调用shell命令