1. 程式人生 > >Appium+python自動化(二十一)- 讓猴子按你指令大鬧手機,讓我們都成為耍猴高手(超詳解)

Appium+python自動化(二十一)- 讓猴子按你指令大鬧手機,讓我們都成為耍猴高手(超詳解)

簡介 

  一年一度的暑假如期而至,每年必不可少的,便是《西遊記》這部經典電視連續劇的播出,作為一名90後,對於這部經典劇的情誼,就是觀看已成為一種習慣。依然深刻的記得,小時候媽媽為了催促我睡覺,而關掉我的《西遊記》,那種哀求不成繼而絕望的感覺,至今記憶猶新。長大後只要得空在家,哪怕手裡做著其他的事情,也要把電視開著,聽一聽《西遊記》。“你挑著擔,我牽著馬,迎來日出,送走晚霞——”這首基本人人能唱幾句的歌曲,陪著我們一代又一代人,走過童年,青年和少年,甚至中年,或許還有將來的老年。坐在沙發上,當熟悉的音樂響起,心中突然冒出一股莫名的激動,電視裡活潑生動的師徒幾人,即便都能背出的故事情節,依舊能讓我露出微笑。

  猴哥桀驁不馴,開始也不聽命令,大鬧天宮也是亂打一番,闖進這裡,跑出哪裡,一會天上一會地下;後來戴上緊箍咒,老實了。猴哥我們不敢耍,但是猴哥的混血弟弟妹妹我們敢耍。

  耍猴在中國已有悠久歷史,最遲於唐朝已有出現,發源於今河南省新野縣。古人把猴子視為馬的守護神,常於馬廄內養猴子以留住馬匹,並讓猴子表演猴戲作祭祀之用,因此猴子又有“馬留”的別稱,此名稱至今仍保留在粵語中。日本於奈良時代從中國傳入猴戲。後來耍猴的宗教性變淡,有些只是純娛樂觀眾,一些小販為招攬顧客,也會養猴子表演賣技藝,尤其常見於賣武術、賣藥等行業。現時香港唯一一隻獲漁農自然護理署發牌由人飼養的猴子金鷹,其已故前主人陳日標生前以賣藥為業,金鷹就在主人賣藥時表演。下邊這幅圖片想必大家都不陌生吧。想必耍猴大家在實地或者電視、電影中都看過,看著耍猴人,發出不同的指令猴子根據指令做出各種搞笑的動作,逗的你開懷大笑。這個不是天生的而是後天訓練的。

  前邊講解的monkey都是隨機事件流,Monkey(猴子)在手機裡像個無頭蒼蠅亂蹦亂跳地大鬧一番;那麼今天巨集哥今天就教你如何讓猴子按您的指令在手機裡大鬧,教你如何耍猴——Monkey(猴子)自定義指令碼。

  

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)+