微信号:grzlwx

介绍:光荣之路官方资讯

【Android测试】模拟长按电源键

2016-02-18 21:33 carter_dream

吴老师要开课了!

起因


  昨天群里看到有人问如何实现一个长按电源键的操作,这个问题经常遇到,而且对于新手来说也比较棘手,于是在尝试成功后,决定说说这个事情。

  一般这样的需求都出现在自动化操作的过程中。但是一般的ui自动化貌似对长按操作都支持的不是特别好,即使有也是针对手机屏幕中的区域来进行长按,我们都知道电源键是一个实体键,无法通过点击ui来实现。说道这里估计很多人都想到了KEYCODE(“KEYCODE”在【Android测试】【第十二节】Uiautomator——API详解中的Uidevice的API列举中有介绍),没错很多的自动化工具提供了通过KEYCODE来进行点击,但是基本上没有长按这一个操作,于是我们就需要借助Android本身的sendevent来进行输入事件的模拟。

事件注入


  Android中的事件注入方式一共有三种:在Monkey源码浅谈的文章中,我们已经介绍过一种事件注入的方法,不过那种方法谷歌的限制比较严格,基本对我们做自动化没什么帮助;第二种是通过内部API的方式,由字面意思可知,只有Android应用程序才可以做到,并且这种方法只在本应用中生效,因此对我们来说也不是特别的理想;还有一种方法就是注入事件到设备/dev/input/eventX,本次我们介绍的sendevent方法,其实就是通过/dev/input/eventX来实现事件模拟的,学会了这个之后就可以做到举一反三,之后所有的点触操作的模拟都可以以此类推。

获得事件


  我来说说我是怎么做的。

  首先我在手机的shell下输入了getevent命令,这样就可以接收到手机上操作的所有event事件。

  这个时候我们按下我们手机电源键,来看看可以接收到哪些事件信息,按下电源键后:

  我们得到了以上四条信息。

  我们来以第一条为例分析一下获得是什么? 

  /dev/input/event0:  代表 device

  0001                         代表一个type

  0074                         代表power键的code(为16进制)

  00000001                 代表value 一般 1代表按下,0代表放开。

  根据查阅sendevent 需要的参数为就是device、type、code、value。

  于是我们就可以通过下面四条命令即可完成按power键的操作,中间sleep的时间长度大于2秒,系统就认为是长按:

sendevent /dev/input/event0 1 116 1(0074转化为十进制后为116) sendevent /dev/input/event0 0 0 0sleep 3sendevent /dev/input/event0 1 116 0sendevent /dev/input/event0 0 0 0

sh脚本


  当知道了如何模拟长按电源键之后,那么我们如何用在自动化中呢?这里我打算介绍一下shell脚本。

  众所周知Android是基于linux内核的,而shell脚本可以运行在linux中,所以我们试试用sh脚本是否可以在Android中运行。

1、完成脚本

  因为Android本身内部没有vi,因此我打算在Windows上写好脚本然后导入进去,脚本内容为:

#!/bin/sh

sendevent /dev/input/event0 1 116 1
sendevent /dev/input/event0 0 0 0
echo "down"
sleep 3
sendevent /dev/input/event0 1 116 0
sendevent /dev/input/event0 0 0 0
echo "up"



2、导入手机

  这一步不用多说,将脚本名称保存为 "boy.sh",然后使用adb导入手机sd卡。

 

3、加权限

  一般linux系统中,导入的文件可能没有权限,因此我们需要加权限后再运行,于是我做了下面的操作:

  运行后提示我没有权限,明明刚才加了权限的,我们来查看一下文件:

  仔细一看果然没有加权限成功,怀疑自己刚才是不是打错了,于是又试了一次,还是不行。  

  最终经过不断的尝试,发现原来是sd卡是无法加权限的,必须要把文件放到 /data/data/的目录下才可以:

  终于权限加成功了。

4、运行

  权限加成功后,迫不及待的去运行:

  还是提示有问题,后来也是不断尝试才知道,原因是手机的启动命令和linux还是有差别,使用下面的启动方法即可:

  运行完成之后,观察手机,出现了长按电源键后的效果:

(作者:carter_dream 转载请联系作者 来源:http://www.cnblogs.com/by-dream/p/5195121.html)

更多精彩请点击 【原文阅读】,与勤劳智慧的作者眉目传情!

公益传播测试知识、技能与正能量!感谢作者!
分享测试生活,思考测试人生!欢迎投稿!
文章图片来自网络,如有侵权请见谅,请联系我们妥善处理。
735821166@qq.com


光荣之路
软件测试培训


官网:www.gloryroad.cn

微信公众号:gloryroadtrain

性能测试QQ群:415987441
测试招聘QQ群: 203715128
自动化3群QQ: 371211499

Python群:457561756


 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 Zabbix 架构以及组件 老板给了三百块的预算,结果这哥们把办公室改成这样了 装逼指南之JavaScript篇 图大杀猫:数据可视化的真善美【岂安低调分享】 成都Meetup小组聚会通知(日期已改)