Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让你成为耍猴高手(超详解)
Posted du-hong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让你成为耍猴高手(超详解)相关的知识,希望对你有一定的参考价值。
简介
一年一度的暑假如期而至,每年必不可少的,便是《西游记》这部经典电视连续剧的播出,作为一名90后,对于这部经典剧的情谊,就是观看已成为一种习惯。依然深刻的记得,小时候妈妈为了催促我睡觉,而关掉我的《西游记》,那种哀求不成继而绝望的感觉,至今记忆犹新。长大后只要得空在家,哪怕手里做着其他的事情,也要把电视开着,听一听《西游记》。“你挑着担,我牵着马,迎来日出,送走晚霞——”这首基本人人能唱几句的歌曲,陪着我们一代又一代人,走过童年,青年和少年,甚至中年,或许还有将来的老年。坐在沙发上,当熟悉的音乐响起,心中突然冒出一股莫名的激动,电视里活泼生动的师徒几人,即便都能背出的故事情节,依旧能让我露出微笑。
猴哥桀骜不驯,开始也不听命令,大闹天宫也是乱打一番,闯进这里,跑出哪里,一会天上一会地下;后来戴上紧箍咒,老实了。猴哥我们不敢耍,但是猴哥的混血弟弟妹妹我们敢耍。
耍猴在中国已有悠久历史,最迟于唐朝已有出现,发源于今河南省新野县。古人把猴子视为马的守护神,常于马厩内养猴子以留住马匹,并让猴子表演猴戏作祭祀之用,因此猴子又有“马留”的别称,此名称至今仍保留在粤语中。日本于奈良时代从中国传入猴戏。后来耍猴的宗教性变淡,有些只是纯娱乐观众,一些小贩为招揽顾客,也会养猴子表演卖技艺,尤其常见于卖武术、卖药等行业。现时香港唯一一只获渔农自然护理署发牌由人饲养的猴子金鹰,其已故前主人陈日标生前以卖药为业,金鹰就在主人卖药时表演。下边这幅图片想必大家都不陌生吧。想必耍猴大家在实地或者电视、电影中都看过,看着耍猴人,发出不同的指令猴子根据指令做出各种搞笑的动作,逗的你开怀大笑。这个不是天生的而是后天训练的。
1.耍猴第一式 - 隐藏命令
1.1monkey隐藏的两个命令:
–pck-blacklist-file<黑名单文件>
–pck-whitelist-file<白名单文件>
1.2monkey还有一个隐藏的命令那就是:
–f<脚本文件>:可以指定monkey的自定义脚本
一般monkey测试都是随机的测试事件,假如我们需要测试某一个特定的场景,普通的命令很难办到,这是就是需要自定义脚本这个命令了,它的使用方式也是很简单方便的,只要我们按照monkey的脚本规范写好脚本,之后将它保存到手机中,然后运行monkey的时候使用-f 命令指定脚本就行。
2.耍猴第二式 - monkey自定义脚本格式
虽然,Google 官方并没有提供对 MS 详细讲解的 API 文档,但是我们是可以通过源码来分析出 MS 支持的API的。
MS 的源码文件是:MonkeySourceScript.java
monkey的源码MonkeySourceScript.java类中有一段关于monkey脚本规则的描述MonkeySourceScript.java有兴趣的同学可以去看一下这个源码,这里以 5.1.1 为例子,进行讲解,其实这一块的代码变动非常的少,找一个版本了解即可。我们看一下源码(33行到46行)对j脚本规则描述。
2.1脚本规则的描述
33/** 34 * monkey event queue. It takes a script to produce events sample script format: 35 * 36 * <pre> 37 * type= raw events 38 * count= 10 39 * speed= 1.0 40 * start data >> 41 * captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0) 42 * captureDispatchKey(5113146,5113146,0,20,0,0,0,0) 43 * captureDispatchFlip(true) 44 * ... 45 * </pre> 46 */
2.2解释他们的意思
#声明脚本的类型 type= raw events #脚本的执行次数,由于monkey运行次数在命令设置的,这里的设置是无效的 count= 10 #事件执行时间间隔,这个也是通过命令来设置,这里不起作用 speed= 1.0 #脚本的入口,说明脚本从下面开始执行 start data >> #下全是monkey命令 captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0) captureDispatchKey(5113146,5113146,0,20,0,0,0,0) captureDispatchFlip(true)
2.3知道了monkey脚本书写的基本格式,在来看一眼monkey常见脚本API
1.LaunchActivity(包名,Activity名称) 启动被测应用的某个Activity 2.Tap(x,y,TapDuration) 一次单击事件 x,y:是坐标 TapDuration:持续的时间,单位毫秒 3.DispatchPress(keyName) 模拟一个按键 keyName:按键的名称 4.RotateScreen(RotationDegree,peresist) 旋转屏幕 RotationDegree:0~3分别表示顺时针的四个方向 peresist:是否存留 5.DispatchFiip(true/false) 打开或关闭软键盘 6.LongPress()长按2秒 7.PressAndHold(x,y,PressDuration) 模拟长按事件 x,y:点击的坐标 PressDuration:持续时常,单位毫秒 8.DispatchString(input) 输入字符串 input:输入的内容 9.Drag(xStart,yStart,xEnd,yEnd,pCount) 模拟拖动操作 xStart,yStart:开始的坐标值 xEnd,yEnd:结束的坐标值 pCount:滑动事件的次数 10.PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2ystart,pt2xEnd,pt2yEnd) 手势缩放事件 pt1xStart,pt1yStart:第一个手指起始的坐标位置 pt1xEnd,pt1yEnd:第一个手指结束的坐标位置 pt2xStart,pt2ystart:第二个手指开始的坐标位置 pt2xEnd,pt2yEnd:第二个手指结束的坐标位置 11.UserWait(sleepTime) 设置睡眠时间 sleepTime:等待时间,单位毫秒 12.DeviceWake() 唤醒设备屏幕
在源码中,所有我们上面介绍的 API 都是以一个 static final
的形式被声明。这里简单就 LaunchActivity 的方法的源码进行讲解,其他的 API 其实也大同小异。
2.4LaunchActivity 的方法的源码讲解
1、浏览器输入源码地址,找到静态字符串LaunchActivity,如图:
2、将鼠标定位到静态字符串LaunchActivity通过ctrl(command)+???左键我们可以定位到方法的位置。大约在597行,如图:
3、将鼠标定位到LaunchActivity的方法通过ctrl(command)+???左键我们可以进入到方法代码。大约在597行,如图:
4、如上边LaunchActiviity 方法源码所示,LaunchActiviity 会以数组的形式接收两个参数,分别表示 PackageName 和 Activity 的 ClassName,下面具体对应的实现,我们就不细看了。再参照上面介绍的 API ,就可以很清晰的定位出方法和参数的含义了。
5、有兴趣的小伙伴们可以通过以上步骤一一查看哪些方法的API。
3.耍猴第三式 - monkey 脚本的实例
1、Monkey脚本主要包含两部分,一部分是头文件信息,一部分是具体的monkey命令。
2、按照2.1的脚本描述规则我们来编辑monkeyscript,如下:
type = user count = 1 speed = 500 start data >> #启动应用程序 LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity) UserWait(5000) #点击下步按钮 Tap(615,609) UserWait(1000) #点击编辑框 Tap(200,85,1000) #输入sg DispatchString(sg)
注意这里分别使用了 DispatchPress 和 DispatchString 来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。
3.1执行脚本
1、编写好脚本,保存为monkey.script 文件。
2、通过 adb push 将其上传到待测试的设备中。要push到sdcard文件夹中(这里一夜神模拟器为例),如图:
adb push C:/Users/DELL/Desktop/monkey.script /sdcard/
3、查看有没有push到设备中,从下图可以看到成功的push进去了。如图:
4、有兴趣或者不相信的可以查看文件内容,如图:
5、然后通过 monkey -f
执行此脚本,例如下面执行 1次。
adb shell monkey -f /sdcard/monkey.script -v 1
6、效果截图
4.小结
1、通过adb pull和adb push 手机与电脑之间传输文件
(1)将手机卡中的某个文件复制到电脑
1,手机连接电脑后,在命令行输入 adb devices,获取到设备序列号后说明手机已经和电脑连接成功。
2,输入: adb pull 手机存储路径 电脑路径
adb pull /sdcard/xxx /Users/xxxx/xxx.tx
(2) 从电脑端向手机复制文件
1,输入: adb pull 电脑路径 手机存储路径
adb push /Users/xxxx/xxx.txt /sdcard/xxx
2、注意事项(此处有坑要留心注意哦!!!)
头文件代码书写注意“=”两边预留空格,否则会出现如下报错。
java.lang.NumberFormatException: Invalid int: ""
3、好了,今天关于耍猴就到这里了!哈哈!最后祝大家都成为耍猴高手!!!
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可)
个人公众号
微信群
以上是关于Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让你成为耍猴高手(超详解)的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫(二十一)_Selenium与PhantomJS
appium+python自动化60-windows上同时启动多个appium服务,让多个android机器并行运行