Appium+python自动化(二十一)- Monkey指令操作手机

第一式 - 隐藏命令

monkey隐藏的两个命令:

–pck-blacklist-file<黑名单文件><br><br>–pck-whitelist-file<白名单文件>

monkey还有一个隐藏的命令那就是:

–f<脚本文件>:可以指定monkey的自定义脚本

  一般monkey测试都是随机的测试事件,假如我们需要测试某一个特定的场景,普通的命令很难办到,这是就是需要自定义脚本这个命令了,它的使用方式也是很简单方便的,只要我们按照monkey的脚本规范写好脚本,之后将它保存到手机中,然后运行monkey的时候使用-f 命令指定脚本就行。

第二式 - monkey自定义脚本格式

1、虽然,Google 官方并没有提供对 MS 详细讲解的 API 文档,但是我们是可以通过源码来分析出 MS 支持的API的。

2、MS 的源码文件是:MonkeySourceScript.java

3、monkey的源码MonkeySourceScript.java类中有一段关于monkey脚本规则的描述MonkeySourceScript.java有兴趣的同学可以去看一下这个源码,这里以 5.1.1 为例子,进行讲解,其实这一块的代码变动非常的少,找一个版本了解即可。我们看一下源码(33行到46行)对j脚本规则描述。

脚本规则的描述

33/**34 * monkey event queue. It takes a script to produce events sample script format:35 *36 * <pre>37 * type= raw events38 * count= 1039 * speed= 1.040 * 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 */

解释他们的意思

#声明脚本的类型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)

知道了monkey脚本书写的基本格式,在来看一眼monkey常见脚本API

1.LaunchActivity(包名,Activity名称)启动被测应用的某个Activity2.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 其实也大同小异。

LaunchActivity 的方法的源码讲解

1、浏览器输入源码地址,找到静态字符串LaunchActivity,如图:

 2、将鼠标定位到静态字符串LaunchActivity通过ctrl(command)+🖱️左键我们可以定位到方法的位置。大约在597行,如图:

 3、将鼠标定位到LaunchActivity的方法通过ctrl(command)+🖱️左键我们可以进入到方法代码。大约在597行,如图:

  

4、如上边LaunchActiviity 方法源码所示,LaunchActiviity 会以数组的形式接收两个参数,分别表示 PackageName 和 Activity 的 ClassName,下面具体对应的实现,我们就不细看了。再参照上面介绍的 API ,就可以很清晰的定位出方法和参数的含义了。

5、有兴趣的可以通过以上步骤一一查看哪些方法的API。 

耍猴第三式 - monkey 脚本的实例

1、Monkey脚本主要包含两部分,一部分是头文件信息,一部分是具体的monkey命令。

2、按照2.1的脚本描述规则我们来编辑monkeyscript,如下:

type = usercount = 1speed = 500start data >>#启动应用程序LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity)UserWait(5000)#点击下步按钮Tap(615,609)UserWait(1000)#点击编辑框Tap(200,85,1000)#输入sgDispatchString(sg)

  以上脚本主要操作过程:

  1、点击夜神模拟器的应用中心

  2、进入应用中心,点击搜索框

  3、在搜索栏输入:test

  4、结束

  注意这里分别使用了 DispatchPress 和 DispatchString 来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。

执行脚本

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、效果截图,在应用中心的搜索栏里输入了:hongge。

7、执行完成之后,可以在控制台,看到输出的 Log 信息。

小结

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: ""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序动态效果实战指南:从悬浮云朵到丝滑列表加载

小红书爆款交互设计解析&#xff0c;附完整代码&#xff01; &#x1f525; 一、为什么动态效果是小程序的关键竞争力&#xff1f; 用户留存提升&#xff1a;数据显示&#xff0c;86.3%的微商从业者依赖微信小程序&#xff0c;而动态效果能显著降低跳出率。技术赋能体验&#…

【机器学习】SAE(Sparse Autoencoders)稀疏自编码器

SAE(Sparse Autoencoders)稀疏自编码器 0.引言 大模型一直被视为一个“黑箱”&#xff0c;研究人员对其内部神经元如何相互作用以实现功能的机制尚不清楚。因此研究机理可解释性&#xff08;Mechanistic Interpretability&#xff09;就成为了一个热门研究方向。大模型的复杂…

抖音授权登录-获取用户授权调用凭证

实现微信小程序获取抖音授权,使用Java实现抖音授权登录,您需要使用抖音开放平台提供的API 第一步 :抖音获取授权码 前提条件 •需要去官网为应用申请 scope 的使用权限。•需要在本接口的 scope 传参中填上需要用户授权的 scope,多个 scope 以逗号分割。•用户授权通过后…

普通人怎样用好Deepseek?

今年4月份左右&#xff08;2025年&#xff09;&#xff0c;我在上班路上开车&#xff0c;一边听着「黑客与画家」的播客&#xff0c;一边想着字节的Trae为啥能够远程编程&#xff0c;而我的poclogsender[1] [2]却只能在本地打日志&#xff0c;3天之后&#xff0c;借助deepseek我…

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…

织梦dedecms {dede:sql} LIKE模糊查询问题 多出‘号

我们在用到dede:sql这个标签时候&#xff0c;查询语句中 LIKE %~title~%&#xff0c;~title~这个like后会出现单引号&#xff0c;造成查询出错或者没有结果&#xff0c;下面就需要修改一下sql.lib.php这个文件&#xff0c;我们需要把自动为语句添加单引号去掉。 找到/include/…

Cursor-1.0安装Jupyter-Notebook,可视化运行.ipynb文件中Python分片代码

Cursor 1.0是AI代码编辑器的里程碑的最新版本。 Cursor - AI 代码编辑器 Cursor - The AI Code Editor 下载 Cursor 我使用的Cursor版本信息 Version: 1.0.0 (Universal) VSCode Version: 1.96.2 Commit: 53b99ce608cba35127ae3a050c1738a959750860 Date: 2025-06-04T19:21:39.…

SQL进阶之旅 Day 28:跨库操作与ETL技术

【SQL进阶之旅 Day 28】跨库操作与ETL技术 文章简述 在现代数据驱动的业务场景中&#xff0c;数据往往分布在多个数据库系统中&#xff0c;如MySQL、PostgreSQL、Oracle等。如何高效地进行跨库操作和**数据集成&#xff08;ETL&#xff09;**成为数据工程师和数据库开发人员必…

Flutter之GetX框架的使用

文章目录 前言GetX使用建议状态管理GetX快速上手GetX基本功能介绍**核心作用****代码示例****关键细节****性能建议** 参考链接 前言 在Reddit上&#xff0c;诟病GetX的声音很多&#xff0c;主要是说它做的事情太多&#xff0c;不是单一功能组件&#xff0c;违反单一职责原则。…

Kettle数据抽取(二)

一、脚本运用 从本地ORACLE11 数据库 抽取数据到 华为MYSQL8.1 数据库 抽取前先删除MYSQL8.1 数据库中emp_dept_salgrade表原有数据,避免重复 二、插入表更新 事实上前面一种方法不是增量处理,因为是全部删除合部重新写入相当于初始化一样,这种情形,如果数据量较大,如有1…

一套高质量的博客平台、社交应用UI

这是一套移动端UI设计素材包含14个高质量PSD文件&#xff0c;涵盖博客社交类APP的核心页面&#xff0c;包括登录界面、动态展示、文章详情、聊天会话等常用场景。所有素材均为可编辑PSD格式&#xff0c;支持快速二次开发&#xff0c;适用于移动网站和APP项目。资源提供完整的UI…

麒麟信安支撑2025年电力监控系统安全运维新技能推广应用示范培训班顺利举办

近日&#xff0c;由国调中心主办、国网技术学院电网运行培训部承办的“2025年电力监控系统安全运维新技能推广应用示范培训班&#xff08;第一期&#xff09;”顺利举办。电网运行培训部高度重视本次培训组织工作&#xff0c;在国调中心的指导下&#xff0c;精心编制培训方案&a…

支付系统架构图

简明产品架构图 1. 商户门户 商户通过该门户管理与支付平台的所有互动&#xff0c;包括&#xff1a; 登录&#xff1a;商户进入系统&#xff0c;进行身份验证。 入驻&#xff1a;新商户注册并加入平台&#xff0c;开始使用支付服务。 订单管理&#xff1a;商户可以管理自己…

企业如何一键复制 DolphinScheduler 项目到新项目服务器?全套自动化方案来了!(企业不外传的实用工具)

在企业生产实践中,常见的一种场景是:一个大数据调度项目需要为多个客户分别部署在不同服务器上,而每个客户的任务逻辑、工作流结构、资源文件基本相同。这种情况下,如果每次都手动创建 DolphinScheduler 项目、上传资源文件、配置流程和参数,不仅浪费大量时间,还极容易出…

Oracle中10个索引优化

Oracle数据库作为一个功能强大的企业级数据库系统&#xff0c;对于索引的优化有着丰富的技巧和方法。理解和运用这些技巧可以显著提高数据库性能。 示例代码&#xff1a; – 假设我们有一个员工表 CREATE TABLE employees ( emp_id NUMBER PRIMARY KEY, name VARCHAR2(100), de…

【cv学习笔记】YOLO系列笔记

写在前面&#xff1a;本文主要介绍YOLO系列的整体框架&#xff0c;以及改进点的介绍。前面有型号的类型是经典&#xff0c;常被应用&#xff0c;YOLOv5&#xff0c;YOLOv8&#xff0c;和YOLOv11是ultralytics公司作品 *YOLOv5 Ultralytics YOLOv5 -Ultralytics YOLO 文档 YOL…

Ubuntu下搭建Black Magic Probe (BMP) 编译环境

版本和环境信息如下&#xff1a; PC平台&#xff1a; Windows 11 专业版 虚拟机运行平台&#xff1a;Oracle VM VirtualBox 7.1.6 Linux虚拟机&#xff1a; Ubuntu24.04 Debug调试器&#xff1a; BlackMagicProbe(BMP) 开源调试器&#xff1a;WeAct STM32F103CBT6 BluePill 核心…

Spring Cloud Gateway 动态路由实现方案

动态路由的核心需求&#xff1a;在不重启网关的情况下&#xff0c;实时修改路由规则。以下是 4 种实现方案&#xff1a; 方案 1&#xff1a;基于内存的动态路由&#xff08;RefreshRoutesEvent&#xff09; 适用场景&#xff1a;临时修改&#xff0c;重启失效 Autowired pri…

Flutter 路由守卫全面解析:从原理到实践

路由守卫是现代移动应用开发中不可或缺的重要机制&#xff0c;它如同应用的"安检系统"&#xff0c;在页面跳转前进行必要的检查和拦截。本文将深入探讨 Flutter 中路由守卫的实现原理、多种实现方案以及实际应用场景&#xff0c;帮助开发者构建更安全、更可靠的 Flut…

mysql表备份数据,改表名

mysql表改表名 在MySQL中&#xff0c;直接更改表名并不是一个操作&#xff0c;因为MySQL不允许直接更改表的名称。但是&#xff0c;你可以通过创建一个新表&#xff0c;然后将旧表的数据复制到新表中&#xff0c;最后删除旧表的方式来实现更改表名的目的。这个过程通常被称为“…