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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84684.shtml
英文地址,請注明出處:http://en.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;最后刪除舊表的方式來實現更改表名的目的。這個過程通常被稱為“…