日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Appium+python自動化(二十三)- 真假美猴王

系統(tǒng) 2238 0

簡介

看《西游記》第五十七回,說是“六耳獼猴”化作孫悟空的摸樣,傷了唐僧,后又和孫悟空大打出手…… 這位假孫悟空,實力不用多說了吧,和真孫悟空一般無二,大戰(zhàn)孫悟空,鬧到上天入地下海。 在唐僧那:念緊箍咒,兩個都喊疼,自然看不出哪個真假; 到天宮:拖塔天王拿照妖鏡照,也看不出; 又到觀音那:觀音也看不出。最后到幽冥處閻羅那,經(jīng)“諦聽”聽過之后,“諦聽”卻說:“我看出來了,卻不敢說” 最后還是如來老佛爺?shù)莱隽嫔聿⒂媒鹄徲壅肿。疟粚O悟空一棍子打死。想必各位小伙伴都看過這以精彩片段。不過據(jù)知情人士說真假美猴王存在陰謀,這里有黑幕:說是真的孫悟空被打死了,活下來的是假的。好了廢話少說,還是回到今天的主題:真假美猴王Monkeyrunner與Monkey傻傻的分不清楚。

  今天宏哥就帶著各位小伙伴和童鞋們再當(dāng)一回和尚:如來佛祖辨一辨真假美猴王,前邊我們已經(jīng)對monkey做過一些詳細(xì)的介紹和講解,今天我們就再來介紹和講解一下monkeyrunner。看看他們之間的到底是一樣還是有區(qū)別的。

monkeyrunner簡介

1. monkeyrunner工具使用Jython,這是一種使用Java編程語言的Python實現(xiàn)。Jython允許monkeyrunner API與Android框架輕松交互。使用Jython,您可以使用Python語法來訪問API的常量,類和方法。MonkeyRunner工具是使用Jython(使用Java編程語言實現(xiàn)的

Python)寫出來的,它提供了多個API,通過monkeyrunner API 可以寫一個Python的程序來模擬操作控制Android設(shè)備app,測試其穩(wěn)定性并通過截屏可以方便地記錄出現(xiàn)的問題。

2.我們來看一下monkeyrunner官網(wǎng)是如何介紹monkeyrunner的:

官網(wǎng)介紹(已翻譯成中文)宏哥在這里給小伙伴截取一段翻譯,如下:

  monkeyrunner工具提供了一個API,用于編寫從Android代碼外部控制Android設(shè)備或模擬器的程序。使用monkeyrunner,您可以編寫一個Python程序,安裝Android應(yīng)用程序或測試包,運(yùn)行它,向其發(fā)送擊鍵,截取其用戶界面,并在工作站上存儲屏幕截圖、

monkeyrunner工具主要用于測試功能/框架級別的應(yīng)用程序和設(shè)備以及運(yùn)行單元測試套件,但您可以將其用于其他目的。

monkeyrunner工具與UI / Application Exerciser Monkey無關(guān) ,也稱為monkey工具。該monkey工具adb直接在設(shè)備或仿真器上的shell中運(yùn)行, 并生成用戶和系統(tǒng)事件的偽隨機(jī)流。相比之下,monkeyrunner工具通過從API發(fā)送特定命令和事件來控制工作站中的設(shè)備和

仿真器。

3.monkeyrunner即android SDK中自帶的工具之一,此工具提供API可按制android設(shè)備或模擬器。

4.有興趣的小伙伴們或者童鞋可以查看一下monkeyrunner官網(wǎng):https://www.android-doc.com/tools/help/monkeyrunner_concepts.html

5.monkeyrunner 路徑:Andriod_SDK\tools

MonkeyRunner工具獨(dú)特功能

1.多設(shè)備控制:monkeyrunner API可以跨多個設(shè)備或仿真器應(yīng)用一個或多個測試套件。您可以物理連接所有設(shè)備或立即啟動所有模擬器(或兩者),以編程方式依次連接到每個設(shè)備,然后運(yùn)行一個或多個測試。您還可以以編程方式啟動模擬器配置,運(yùn)行一個或多個測試,然后關(guān)閉模擬器。

2.功能測試:monkeyrunner可以對Android應(yīng)用程序進(jìn)行自動化的從頭到尾的測試。您可以通過擊鍵或觸摸事件提供輸入值,并將結(jié)果視為屏幕截圖。

3.回歸測試 - monkeyrunner可以通過運(yùn)行應(yīng)用程序并將其輸出屏幕截圖與一組已知正確的屏幕截圖進(jìn)行比較來測試應(yīng)用程序的穩(wěn)定性。

4.可擴(kuò)展的自動化 - 由于monkeyrunner是一個API工具包,您可以開發(fā)一個基于Python的模塊和程序的整個系統(tǒng)來控制Android設(shè)備。除了使用monkeyrunner API本身,您還可以使用標(biāo)準(zhǔn)的Python? os 和? subprocess ?模塊來調(diào)用Android工具,例如?Android Debug Bridge。

您還可以將自己的類添加到monkeyrunner API中。這在“?使用插件擴(kuò)展monkeyrunner?”一節(jié)中有更詳細(xì)的描述?。

Monkeyrunner與Monkey區(qū)別

monkeyrunner和money沒有什么直接的關(guān)系,monkey是在設(shè)備直接運(yùn)行adb shell命令生成隨機(jī)事件來進(jìn)行測試的。相比較而言,monkeyrunner則是通過API發(fā)送特定的命令和事件來控制設(shè)備。

為了支持黑盒自動化測試的場景,Android SDK提供了monkey和monkeyrunner兩個測試工具,這兩個測試工具除了名字類似外,還都可以向待測應(yīng)用發(fā)送按鍵等消息,往往容易產(chǎn)生混淆,以下是他倆的不同之處。

Monkey:

Monkey工具直接運(yùn)行在設(shè)備或模擬器的adb shell中,生成用戶或系統(tǒng)的偽隨機(jī)事件流。

1.monkey運(yùn)行在設(shè)備或者模擬器上邊,可以脫離PC運(yùn)行,其運(yùn)行時如下圖所示。

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第1張圖片

?

Monkeyrunner:

Monkeyrunner工具是在工作站上通過API定義的特定命令和事件控制設(shè)備或模擬器。

而monkeyrunner運(yùn)行在PC上,需要通過服務(wù)器/客戶端的的模式向設(shè)備或者模擬器上的android應(yīng)用發(fā)送指令來執(zhí)行測試,其運(yùn)行時如下圖所示。

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第2張圖片

?

2.普遍的做法是將monkey作為一個向待測應(yīng)用發(fā)送隨機(jī)按鍵消息的測試工具,驗證待測應(yīng)用在這些隨機(jī)性的輸入面前是否會有閃退或者崩潰。而monkeyrunner則接受一個明確的測試腳本(使用python語言編寫的)。

3.雖然monkey也可以根據(jù)一個指定的命令腳本發(fā)送按鍵消息,但其不支持條件判斷,也不支持讀取界面的信息來執(zhí)行驗證操作。而monkeyrunner的測試腳本中有明確 的條件判斷等語句,可用來做功能測試。

?總結(jié):

  實際操作中,monkey由于缺少必要的條件判斷等命令,難以在功能測試上有所作為,只能作為生成一些隨機(jī)事件的工具,測試應(yīng)用程序的健壯程度,待測應(yīng)用崩潰后可以根據(jù)monkey打印的日志,再用monkey創(chuàng)建一個重現(xiàn)步驟,供開發(fā)調(diào)試。monkey服務(wù)器模式更適合用于黑盒測試,不建議用于自動化測試。

  而Monkeyrunner雖然有Python和Java類庫的強(qiáng)大支持,但其自身提供的API有限,還得需要插件擴(kuò)展其功能。

monkeyrunner API

monkeyrunner API包含在包中的三個模塊中? com.android.monkeyrunner

1.MonkeyRunner :monkeyrunner程序的一類實用方法。此類提供了將monkeyrunner連接到設(shè)備或模擬器的方法。它還提供了為monkeyrunner程序創(chuàng)建UI以及顯示內(nèi)置幫助的方法。

2.MonkeyDevice :表示設(shè)備或模擬器。此類提供了安裝和卸載軟件包,啟動Activity以及向應(yīng)用程序發(fā)送鍵盤或觸摸事件的方法。您還可以使用此類來運(yùn)行測試包。

3.MonkeyImage :表示屏幕捕獲圖像。此類提供捕獲屏幕,將位圖圖像轉(zhuǎn)換為各種格式,比較兩個MonkeyImage對象以及將圖像寫入文件的方法。

在Python程序中,您可以將每個類作為Python模塊進(jìn)行訪問。 monkeyrunner工具不會自動導(dǎo)入這些模塊。 要導(dǎo)入模塊,請使用Python? from 語句:

            
              1
            
            
              from
            
             com.android.monkeyrunner import 
            
          

您要導(dǎo)入的類名 ?在哪里 from 通過用逗號分隔模塊名稱, 可以在同一 語句中 導(dǎo)入多個模塊

運(yùn)行monkeyrunner

您可以從文件中運(yùn)行monkeyrunner程序,也可以在交互式會話中輸入monkeyrunner語句。 您可以通過調(diào)用 SDK目錄子目錄中 monkeyrunner 命令來 執(zhí)行這兩項操作 tools/ 如果提供文件名作為參數(shù),則該 monkeyrunner 命令將文件的內(nèi)容作為Python程序運(yùn)行;? 否則,它會啟動一個交互式會話。

monkeyrunner 命令 的語法

            
              1
            
             monkeyrunner -plugin 
            
              
                
              
            
          

表1解釋了標(biāo)志和參數(shù)。

表1. ? monkeyrunner 標(biāo)志和參數(shù)。

?

參數(shù) 描述
-plugin (可選)指定 .jar 包含monkeyrunner插件 文件。 要了解有關(guān)monkeyrunner插件的更多信息,請參閱? 使用插件擴(kuò)展monkeyrunner 要指定多個文件,請多次包含該參數(shù)。
如果提供此參數(shù),則該 monkeyrunner 命令將該文件的內(nèi)容作為Python程序運(yùn)行。 如果未提供參數(shù),則該命令將啟動交互式會話。
(可選) 中程序的標(biāo)志和參數(shù)。

運(yùn)行monkeyrunner

命令語法為:

monkeyrunner?-plugin? ? ?

?

方式一:在CMD命令窗口直接運(yùn)行monkeyrunner

方式二:使用Python編寫測試代碼文件,在CMD中執(zhí)行monkeyrunner hongge.py運(yùn)行

不論使用哪種方式,您都需要調(diào)用SDK目錄的tools子目錄下的monkeyrunner命令。

?

注意:在運(yùn)行monkeyrunner之前必須先運(yùn)行相應(yīng)的模擬器或連接真機(jī),否則monkeyrunner無法連接到設(shè)備
運(yùn)行模擬器有兩種方法:1、通過eclipse中執(zhí)行模擬器 2、在CMD中通過命令調(diào)用模擬器
這里介紹通過命令,在CMD中執(zhí)行模擬器的方法
emulator?-avd?test
上面命令中test是指模擬器的名稱。

?

附:這部分前邊已經(jīng)講解過,在這里就不再贅述)

問題:CMD運(yùn)行提示monkeyrunner不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。

解決:電腦環(huán)境變量未配置,將monkeyrunner所在目錄配在環(huán)境變量里。

變量名:Path

變量值:D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools

實例

實例一:卸載舊的APP,安裝新的APP?

*準(zhǔn)備

a.?連接安卓夜神模擬器設(shè)備

b.?運(yùn)行CMD,檢測是否連接成功

CMD>adb devices

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第3張圖片

?

附:(這部分前邊已經(jīng)講解過,在這里就不再贅述)

問題:CMD運(yùn)行提示adb不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。

解決:電腦環(huán)境變量未配置,將adb所在目錄配在環(huán)境變量里。??

*方式一: ?

1.打開CMD,運(yùn)行monkeyrunner

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第4張圖片

?

2.進(jìn)入monkeyrunner的shell命令交互模式后,逐條輸入以下命令

1?from?com.android.monkeyrunner?import?MonkeyRunner,?MonkeyDevice,?MonkeyImage
2?device?=?MonkeyRunner.waitForConnection()
3?device.removePackage('com.taobao.taobao')
4?device.installPackage('C:\\Users\\DELL\\Desktop\\702757.apk')

(1)輸入命令前的夜神模擬器:

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第5張圖片

(2)輸入第三行命令后的夜神模擬器

? Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第6張圖片

(3)輸入第四行的夜神模擬器

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第7張圖片

?

注:每條命令的作用,請見方法二中的注解

實操如圖:

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第8張圖片

?

c.檢查手機(jī)app是否已更新?

*方式二:

a.?編寫Python測試代碼

            
               1
            
            
              # File:   Test1.py

            
            
               2
            
             # Vision: V1.
            
              0
            
            
               3
            
            
              # Author: hongge  QQ群:707699217

            
            
               4
            
            
              # 引入本程序所用到的模塊

            
            
               5
            
            
              from
            
            
               com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

            
            
               6
            
            
               7
            
            
              # 連接手機(jī)設(shè)備

            
            
               8
            
             device =
            
               MonkeyRunner.waitForConnection()

            
            
               9
            
            
              10
            
            
              # 截圖

            
            
              11
            
             result =
            
               device.takeSnapshot()

            
            
              12
            
            
              # 將截圖保存到文件 

            
            
              13
            
             result.writeToFile(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            
              )

            
            
              14
            
            
              15
            
            
              # 卸載APP

            
            
              16
            
             device.removePackage(
            
              '
            
            
              cn.richinfo.thinkdrive
            
            
              '
            
            
              )

            
            
              17
            
             print (
            
              '
            
            
              Uninstall Success!
            
            
              '
            
            
              )

            
            
              18
            
            
              19
            
            
              # 暫停5秒

            
            
              20
            
             MonkeyRunner.sleep(
            
              5
            
            
              )

            
            
              21
            
            
              22
            
            
              # 截圖

            
            
              23
            
             result =
            
               device.takeSnapshot()

            
            
              24
            
             result.writeToFile(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            
              )

            
            
              25
            
            
              26
            
            
              # 安裝新的APP

            
            
              27
            
             device.installPackage(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk
            
            
              '
            
            
              )

            
            
              28
            
             print (
            
              '
            
            
              Install Success!
            
            
              '
            
            
              )

            
            
              29
            
            
              30
            
            
              # 截圖

            
            
              31
            
             result =
            
               device.takeSnapshot()

            
            
              32
            
             result.writeToFile(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            )
          

注:拷貝運(yùn)行時請去掉中文注釋;或者在開頭加入?#coding=utf-8?

b.執(zhí)行Test1.py腳本

            Monkeyrunner C:\Users\DELL\Desktop\test.py
          

實操如圖:

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第9張圖片

?

c.檢查手機(jī)app是否已更新

d.查看截圖文件夾,截圖和上邊逐條輸入命令,宏哥截得模擬器一模一樣的。

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第10張圖片

e.注意如果截圖不一樣自己加個等待時間,就會一樣,參考代碼:

            
               1
            
             #coding=utf-
            
              8
            
            
               2
            
            
              # File:   Test1.py

            
            
               3
            
            
               4
            
             # Vision: V1.
            
              0
            
            
               5
            
            
               6
            
             # Author: hongge  QQ群:
            
              707699217
            
            
               7
            
            
               8
            
            
              # 引入本程序所用到的模塊

            
            
               9
            
            
              10
            
            
              from
            
            
               com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

            
            
              11
            
            
              12
            
            
              13
            
            
              14
            
            
              # 連接手機(jī)設(shè)備

            
            
              15
            
            
              16
            
             device =
            
               MonkeyRunner.waitForConnection()

            
            
              17
            
            
              18
            
            
              19
            
            
              20
            
            
              # 截圖

            
            
              21
            
            
              22
            
             result =
            
               device.takeSnapshot()

            
            
              23
            
            
              24
            
            
              # 將截圖保存到文件 

            
            
              25
            
            
              26
            
             result.writeToFile(
            
              '
            
            
              C:\\Users\\DELL\\Desktop\\test\\Test1_001.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            
              )

            
            
              27
            
            
              28
            
            
              29
            
            
              30
            
            
              # 卸載APP

            
            
              31
            
            
              32
            
             device.removePackage(
            
              '
            
            
              com.taobao.taobao
            
            
              '
            
            
              )

            
            
              33
            
            
              34
            
             print (
            
              '
            
            
              Uninstall Success!
            
            
              '
            
            
              )

            
            
              35
            
            
              36
            
            
              37
            
            
              38
            
            
              # 暫停5秒

            
            
              39
            
            
              40
            
             MonkeyRunner.sleep(
            
              5
            
            
              )

            
            
              41
            
            
              42
            
            
              43
            
            
              44
            
            
              # 截圖

            
            
              45
            
            
              46
            
             result =
            
               device.takeSnapshot()

            
            
              47
            
            
              48
            
             result.writeToFile(
            
              '
            
            
              C:\\Users\\DELL\\Desktop\\test\\Test1_002.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            
              )

            
            
              49
            
            
              50
            
            
              51
            
            
              # 暫停5秒

            
            
              52
            
            
              53
            
             MonkeyRunner.sleep(
            
              5
            
            
              )

            
            
              54
            
            
              55
            
            
              56
            
            
              # 安裝新的APP

            
            
              57
            
            
              58
            
             device.installPackage(
            
              '
            
            
              C:\\Users\\DELL\\Desktop\\702757.apk
            
            
              '
            
            
              )

            
            
              59
            
            
              60
            
             print (
            
              '
            
            
              Install Success!
            
            
              '
            
            
              )

            
            
              61
            
            
              62
            
            
              # 暫停5秒

            
            
              63
            
            
              64
            
             MonkeyRunner.sleep(
            
              5
            
            
              )

            
            
              65
            
            
              66
            
            
              # 截圖

            
            
              67
            
            
              68
            
             result =
            
               device.takeSnapshot()

            
            
              69
            
            
              70
            
             result.writeToFile(
            
              '
            
            
              C:\\Users\\DELL\\Desktop\\test\\Test1_003.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            )
          

?

monkeyrunner內(nèi)置幫助

您可以通過運(yùn)行以下命令為monkeyrunner生成API參考:

            
              1
            
             monkeyrunner help.py 
            
              
            
          

論點(diǎn)是:

  • 或者是 text 純文本的輸出或 html 用于HTML輸出。
  • ?是輸出文件的路徑限定名稱。

使用插件擴(kuò)展monkeyrunner

您可以使用Java編程語言編寫的類擴(kuò)展monkeyrunner API,并將其構(gòu)建為一個或多個 .jar 文件。 您可以使用此功能使用您自己的類擴(kuò)展monkeyrunner API或擴(kuò)展現(xiàn)有類。 您還可以使用此功能初始化monkeyrunner環(huán)境。

要為monkeyrunner提供插件,請 monkeyrunner 使用 表1中 -plugin 描述 參數(shù)? 調(diào)用該 命令?

在你的插件代碼,你可以導(dǎo)入和擴(kuò)展的主要monkeyrunner類? MonkeyDevice MonkeyImage MonkeyRunner com.android.monkeyrunner (見 的monkeyrunner API )。

請注意,插件不允許您訪問Android SDK。 您無法導(dǎo)入包等 com.android.app 這是因為monkeyrunner與框架API級別下的設(shè)備或模擬器交互。

插件啟動類

.jar 插件 ?的 文件可以指定在腳本處理開始之前實例化的類。 要指定此類,請將密鑰添加? MonkeyRunnerStartupRunner .jar 文件的清單中。 該值應(yīng)該是啟動時要運(yùn)行的類的名稱。 以下代碼段顯示了如何在 ant 構(gòu)建腳本中 執(zhí)行此操作

            
              1
            
            
              "
              
                myplugin
              
              
                "
              
               basedir=
              
                "
              
              
                ${build.dir}
              
              
                "
              
              >

              
                2
              
              
                
                  3
                
                
                  "
                  
                    MonkeyRunnerStartupRunner
                  
                  
                    "
                  
                   value=
                  
                    "
                  
                  
                    com.myapp.myplugin
                  
                  
                    "
                  
                  />

                  
                    4
                  
                
              
              
                5
              
            
          

要訪問monkeyrunner的運(yùn)行時環(huán)境,啟動類可以實現(xiàn)? com.google.common.base.Predicate 例如,此類在默認(rèn)命名空間中設(shè)置一些變量:

            
               1
            
            
              package com.android.example;

            
            
               2
            
            
               3
            
             import com.google.common.
            
              base
            
            
              .Predicate;

            
            
               4
            
            
              import org.python.util.PythonInterpreter;

            
            
               5
            
            
               6
            
            
              public
            
            
              class
            
             Main implements Predicate
            
              
                 {

              
              
                 7
              
              
                    @Override

              
              
                 8
              
              
                public
              
              
                 boolean apply(PythonInterpreter anInterpreter) {

              
              
                 9
              
              
                10
              
              
                /*
              
              
                11
              
              
                        * Examples of creating and initializing variables in the monkeyrunner environment's

              
              
                12
              
              
                        * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"

              
              
                13
              
              
                        * and "use_emulator"

              
              
                14
              
              
                        *

              
              
                15
              
              
                */
              
              
                16
              
                       anInterpreter.
              
                set
              
              (
              
                "
              
              
                newtest
              
              
                "
              
              , 
              
                "
              
              
                enabled
              
              
                "
              
              
                );

              
              
                17
              
                       anInterpreter.
              
                set
              
              (
              
                "
              
              
                use_emulator
              
              
                "
              
              , 
              
                1
              
              
                );

              
              
                18
              
              
                19
              
              
                return
              
              
                true
              
              
                ;

              
              
                20
              
                   }
            
          

monkeyrunner環(huán)境搭建

1.安裝并配置好jdk環(huán)境

2.安裝android sdk

3.安裝python?

4.monkeyrunner環(huán)境變量配置: {Path}\Andriod_SDK\tools

安裝結(jié)果檢測

在docs命令控制臺輸入命令:monkeyrunner出現(xiàn)如下顯示內(nèi)容則說明安裝成功

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第11張圖片

?

Tips:退出monkeyrunner命令行模式可以 使用快捷鍵 ctrl+D退出。

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第12張圖片

?

小結(jié)

1.在方式二運(yùn)行monkeyrunner報錯(190724 14:33:20.837:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception)

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第13張圖片

解決方法,報出該錯誤是使用的notepad++編碼格式問題,notepad++默認(rèn)編碼格式是ansi,我們使用的monkeyrunner腳本格式是utf-8,因此有沖突

修改方法如下

首先,看我們的腳本編碼格式是什么,我這里的是utf-8,因此不用再做修改

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第14張圖片

3.如果編碼格式不是utf-8的,就要對它進(jìn)行修改了,點(diǎn)擊格式,選擇utf-8,再保存,也可選擇無BOM格式的

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第15張圖片

4.再來運(yùn)行一下,這次成功了

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第16張圖片

?

2.monkeyrunner常用的知識點(diǎn)

#引入程序所用的模塊
              
                1
              
              
                from
              
               com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 
            

?

#引入程序所用的模塊,使用別名

            
              1
            
            
              from
            
             com.android.monkeyrunner import MonkeyRunner 
            
              as
            
            
               mr

            
            
              2
            
            
              from
            
             com.android.monkeyrunner import MonkeyDevice 
            
              as
            
            
               md

            
            
              3
            
            
              from
            
             com.android.monkeyrunner import MonkeyImage 
            
              as
            
            
               mi

            
            
              4
            
            
              #如果給導(dǎo)入的模塊起了別名,就必須使用別名,否則會出現(xiàn)錯誤。

            
            
              5
            
            
              #比如連接設(shè)備或模擬器,起了以上別名后,命令應(yīng)該如下:

            
            
              6
            
             device=mr.waitForConnection()
          

?

#連接到設(shè)備或模擬器

            
              1
            
            
              #參數(shù)1:超時時間,單位秒,浮點(diǎn)數(shù)。默認(rèn)是無限期地等待。

            
            
              2
            
            
              #參數(shù)2:串deviceid,指定的設(shè)備名稱。默認(rèn)為當(dāng)前設(shè)備(手機(jī)優(yōu)先,比如手機(jī)通過USB線連接到PC、其次為模擬器)。

            
            
              3
            
            
              #默認(rèn)連接:

            
            
              4
            
             device =
            
               MonkeyRunner.waitForConnection()

            
            
              5
            
            
              #參數(shù)連接:

            
            
              6
            
             device = MonkeyRunner.waitForConnection(
            
              1.0
            
            ,
            
              '
            
            
              4df74b8XXXXXXX
            
            
              '
            
            ) 
          

?

#向設(shè)備或模擬器安裝APK?

            
              1
            
            
              #以下兩種方式都是對的

            
            
              2
            
             device.installPackage(
            
              '
            
            
              E:/JAVA/monkeyrunner/Test1/ThinkDrive_new.apk
            
            
              '
            
            
              )

            
            
              3
            
             device.installPackage(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk
            
            
              '
            
            
              )

            
            
              4
            
             #參數(shù)可以為絕對路徑,也可為相對路徑
          

?

#卸載設(shè)備或模擬器中的APK?

            
              1
            
            
              #參數(shù)為APK包名

            
            
              2
            
             device.removePackage(
            
              '
            
            
              cn.richinfo.thinkdrive
            
            
              '
            
            ) 
          

?

#啟動任意的Activity
              
                1
              
               #device.startActivity(component=
              
                "
              
              
                包名/啟動Activity
              
              
                "
              
              
                )

              
              
                2
              
              
                #以下兩種都OK

              
              
                3
              
               device.startActivity(component=
              
                "
              
              
                cn.richinfo.thinkdrive/cn.richinfo.thinkdrive.ui.activities.NavigateActivity
              
              
                "
              
              
                )

              
              
                4
              
               device.startActivity(component=
              
                "
              
              
                cn.richinfo.thinkdrive/.ui.activities.NavigateActivity
              
              
                "
              
              )
            

?

?

#手機(jī)截圖?

            
              1
            
            
              #獲取設(shè)備的屏蔽緩沖區(qū),產(chǎn)生了整個顯示器的屏蔽捕獲。(截圖)

            
            
              2
            
             result=
            
              device.takeSnapshot()

            
            
              3
            
            
              #返回一個MonkeyImage對象(點(diǎn)陣圖包裝),我們可以用以下命令將圖保存到文件

            
            
              4
            
             result.writeToFile(
            
              '
            
            
              E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png
            
            
              '
            
            ,
            
              '
            
            
              png
            
            
              '
            
            )
          

?

#暫停?

            
              1
            
            
              #暫停目前正在運(yùn)行的程序指定的秒數(shù)

            
            
              2
            
            
              #MonkeyRunner.sleep(秒數(shù),浮點(diǎn)數(shù)) 

            
            
              3
            
             MonkeyRunner.sleep(
            
              5
            
            )
          

?

#字符串發(fā)送到鍵盤?
              
                1
              
               #device.type(
              
                '
              
              
                字符串
              
              
                '
              
              
                )

              
              
                2
              
               device.type(
              
                '
              
              
                hongge
              
              
                '
              
              )
            

?

#喚醒設(shè)備屏幕
              
                1
              
              
                #鎖屏后,屏幕關(guān)閉,可以用下命令喚醒

              
              
                2
              
               device.wake()
            
?

#重起手機(jī)

            
              1
            
             device.reboot()
          

?

#模擬滑動

            
              1
            
            
              #device.drag(X,Y,D,S)

            
            
              2
            
            
              #X 開始坐標(biāo)

            
            
              3
            
            
              #Y 結(jié)束坐標(biāo)

            
            
              4
            
            
              #D 拖動持續(xù)時間(以秒為單位),默認(rèn)1.0秒

            
            
              5
            
            
              #S 插值點(diǎn)時要采取的步驟。默認(rèn)值是10

            
            
              6
            
             device.drag((
            
              100
            
            ,
            
              1053
            
            ),(
            
              520
            
            ,
            
              1053
            
            ),
            
              0.1
            
            ,
            
              10
            
            )
          

?

#在指定位置發(fā)送觸摸事件?

            
              1
            
            
              #device.touch(x,y,觸摸事件類型)

            
            
              2
            
            
              #x,y的單位為像素

            
            
              3
            
            
              #觸摸事件類型,請見下文中Findyou對device.press描述

            
            
              4
            
            
              5
            
             device.touch(
            
              520
            
            ,
            
              520
            
            ,
            
              '
            
            
              DOWN_AND_UP
            
            
              '
            
            )
          

?

#發(fā)送指定類型指定鍵碼的事件

            
               1
            
            
              #device.press(參數(shù)1:鍵碼,參數(shù)2:觸摸事件類型)

            
            
               2
            
            
              #參數(shù)1:見android.view.KeyEvent

            
            
               3
            
            
              #參數(shù)2,如有TouchPressType()返回的類型-觸摸事件類型,有三種。

            
            
               4
            
             #
            
              1
            
            
              、DOWN 發(fā)送一個DOWN事件。指定DOWN事件類型發(fā)送到設(shè)備,對應(yīng)的按一個鍵或觸摸屏幕上。

            
            
               5
            
             #
            
              2
            
            
              、UP 發(fā)送一個UP事件。指定UP事件類型發(fā)送到設(shè)備,對應(yīng)釋放一個鍵或從屏幕上抬起。

            
            
               6
            
             #
            
              3
            
            
              、DOWN_AND_UP 發(fā)送一個DOWN事件,然后一個UP事件。對應(yīng)于輸入鍵或點(diǎn)擊屏幕。

            
            
               7
            
            
              以上三種事件做為press()參數(shù)或touch()參數(shù)

            
            
               8
            
            
               9
            
            
              #按下HOME鍵

            
            
              10
            
             device.press(
            
              '
            
            
              KEYCODE_HOME
            
            
              '
            
            
              ,MonkeyDevice.DOWN_AND_UP) 

            
            
              11
            
            
              #按下BACK鍵

            
            
              12
            
             device.press(
            
              '
            
            
              KEYCODE_BACK
            
            
              '
            
            
              ,MonkeyDevice.DOWN_AND_UP) 

            
            
              13
            
            
              #按下下導(dǎo)航鍵

            
            
              14
            
             device.press(
            
              '
            
            
              KEYCODE_DPAD_DOWN
            
            
              '
            
            
              ,MonkeyDevice.DOWN_AND_UP) 

            
            
              15
            
            
              #按下上導(dǎo)航鍵

            
            
              16
            
             device.press(
            
              '
            
            
              KEYCODE_DPAD_UP
            
            
              '
            
            
              ,MonkeyDevice.DOWN_AND_UP) 

            
            
              17
            
            
              #按下OK鍵

            
            
              18
            
             device.press(
            
              '
            
            
              KEYCODE_DPAD_CENTER
            
            
              '
            
            ,MonkeyDevice.DOWN_AND_UP) 
          

?

?3.好了時間也不早了,今天就啰嗦、水到這里吧,哈哈!晚安。好夢!!!

您的肯定就是我進(jìn)步的動力。 如果你感覺還不錯,就請鼓勵一下吧!記得點(diǎn)波? 推薦 ?哦!!!(點(diǎn)擊右邊的小球即可)
Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第17張圖片

個人公眾號

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第18張圖片

微信群

Appium+python自動化(二十三)- 真假美猴王Monkeyrunner與Monkey傻傻的分不清楚(超詳解)_第19張圖片

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 遵义市| 定州市| 武汉市| 兴义市| 龙南县| 东乡县| 巴青县| 台湾省| 祁阳县| 巴里| 临夏县| 迭部县| 定远县| 安远县| 城口县| 唐山市| 宜黄县| 清丰县| 甘谷县| 西乌珠穆沁旗| 汶川县| 凤翔县| 卢龙县| 外汇| 时尚| 松桃| 客服| 大渡口区| 林周县| 宾川县| 綦江县| 八宿县| 田东县| 龙岩市| 临泉县| 夹江县| 象山县| 城固县| 文成县| 来宾市| 东光县|