1. 程式人生 > >【MonkeyRunner】eclipse中編寫monkeyrunner指令碼環境搭建

【MonkeyRunner】eclipse中編寫monkeyrunner指令碼環境搭建

http://www.csdn123.com/html/itweb/20130815/60106_60105_60108.htm

http://blog.csdn.net/robinzhou/article/details/6771120

http://www.dup2.org/node/1538

【說明】MonkeyRunner是Android提供的自動化測試工具,能夠執行Python語言編寫的指令碼;Python指令碼可以在文字編輯器中編輯,也可以用eclipse整合Python外掛,實現在eclipse中編寫Python指令碼;在eclips中編寫Python指令碼的好處是能夠使用eclipse中的函式提示功能,更方便;但是,eclipse中編寫的python指令碼是無法直接執行的,只能在命令列下執行,因為Android SDK並未提供windows環境下的直譯器,如果在linux環境下是可以直接在eclips中執行指令碼的

一、搭建步驟

<1>. 建立Python的開發環境;

這裡使用的Python的開發環境是eclipse + pydev外掛來配置python的開發環境,如果想要在命令列下使用python的話,需要設定計算機的環境變數。

1.1 .安裝Python。

Windows環境搭建:首先,從Python的官方網站下載最新的版本,安裝好之後把你的安裝目錄新增至環境變數path中。

1.2  安裝eclipse外掛

 

查詢該外掛,並安裝,注意安裝過程中可能存在需要trust外掛的情況,直接選擇信任即可。

 

然後等待外掛安裝完成即可,重啟eclipse,下面需要設定eclipse的pydev的外掛的環境。


選擇剛才python完成路徑下的python.exe直譯器。

 

 

最終完成之後的效果如下:

 

下載2.82版本1.6可用

<2>匯入monkeyrunner相關的jar

開啟eclipse設定,window->preferences

 

新建一個lib目錄,接著選擇新增好的目錄新添ddmlib.jar guavlib.jar  monkeyrunner.jar  sdklib.jar這幾個jar

<3>.monkeyrunner工程

新建一個python工程。

 

鍵入工程名,點選完成,將生成一個python project

我們新建一個pythonmodule


可以開始程式碼編寫了。

程式碼示例:

匯入此程式所需的monkeyrunner模組

from com.android.monkeyrunnerimport MonkeyRunnerMonkeyDevice

連線當前裝置,返回一個MonkeyDevice物件

device=MonkeyRunner.waitForConnection()

執行測試應用

device.startActivity component='com.huawei.imax.launcher'

形成一個點選事件

device.touch200,1800,'DOWN_AND_UP' 

擷取螢幕截圖

result = device.takeSnapShot

#將截圖儲存至檔案

result.writeToFile'myproject/shot1.png' 'png' 

<4>執行指令碼

通過monkeyrunner執行需要對應的環境,可以下載一個androidsdk;

開啟cmd,切換至androidsdk的tools目錄,執行命令

monkeyrunner 檔案地址

二、異常處理

按照上述方法配置後,編寫指令碼可能會提示如下錯誤

Unresolved import: MonkeyDevice
Unresolved import: MonkeyRunner

這是因為,雖然在Preference——》java——》User Libraries中匯入了ddmlib.jar guavlib.jar monkeyrunner.jar  sdklib.jar這幾個jar,但是工程依然無法找到monkeyrunner.jar

解決方法,在External Libraries中繼續加入上述jar包


 三、指令碼執行

      1、windows環境下eclipse中是無法執行monkeyrunner指令碼的,提示如下錯誤

        Traceback (most recent call last):
  File "D:\Mywork\HelloPython\src\test.py", line 2, in <module>
    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
ImportError: No module named com.android.monkeyrunner

     2、在命令列下執行monkeyrunner指令碼,需要帶上指令碼的完整路徑,即使在指令碼所在目錄

四、使用wrapEasyMonkey.jar

      下載wrapEasyMonkey.jar,當前版本為2.0版本,直接複製到\adt-bundle-20131030\sdk\tools\lib目錄下即可

      在工程的-》properties-》PyDev-PYTHONPATH,選擇External Libraries,匯入wrapEasyMonkey.jar

    

五、修改warpEasyMonkey

     參考:http://blog.csdn.net/testing_is_believing/article/details/16369639

      將核心程式碼

def getChildView(self, parentId, *childSeq):
    hierarchyViewer = self.device.getHierarchyViewer()
    str_getchildview="hierarchyViewer.findViewById('" + parentId +"')"    
    for index in childSeq:       
        str_getchildview+=('.children[' + str(index) + ']')         
    exec 'child_view=' + str_getchildview
    return child_view

拷貝到warpEasyMonkey.jar的warpEasyMonke.py檔案末尾,並重新打包warpEasyMonkey.jar,替換掉\adt-bundle-20131030\sdk\tools\lib目錄下的原jar包,clean工程,即可使用該函式,找到重複id

六、測試實踐

#coding=utf-8
from com.whoistester.android.testimport import os,sys,re,string,locale,ViewClient,wrapEasyMonkey,MonkeyDevice,MonkeyRunner,EasyMonkeyDevice,By
package = 'com.android.contacts'
activity = '/com.android.contacts.activities.PeopleActivity'
component = package + activity
deviceId='04c***********'
mydevice = wrapEasyMonkey(deviceId)
mydevice.startActivity(component)
MonkeyRunner.sleep(5)

#清空聯絡人,初始狀態下新增一個聯絡人
mydevice.touchViewById('id/create_contact_button',mydevice.DOWN_AND_UP)
MonkeyRunner.sleep(2)
mydevice.type("test1")
mydevice.touchViewById('id/0xc', mydevice.DOWN_AND_UP)
mydevice.type("company1")
mydevice.touchViewById('id/add_text',mydevice.DOWN_AND_UP)
MonkeyRunner.sleep(2)
mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP)
mydevice.touchViewById('id/0x16',mydevice.DOWN_AND_UP)
mydevice.type("15311111001")
mydevice.touchViewById('id/done',mydevice.DOWN_AND_UP)
MonkeyRunner.sleep(2)
mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP)
#從聯絡人列表新增聯絡人
for i in range(2,10):
    name = "test"+str(i)
    company = "company"+str(i)
    num = str(15311111000+i)
    print "name="+name+"company="+company+"num="+num
    MonkeyRunner.sleep(5)
    mydevice.touchViewById('id/menu_add_contact', mydevice.DOWN_AND_UP)
    MonkeyRunner.sleep(2)
    mydevice.type(name)
    mydevice.touchViewById('id/0xc', mydevice.DOWN_AND_UP)
    mydevice.type(company)
    mydevice.touchViewById('id/add_text',mydevice.DOWN_AND_UP)
    MonkeyRunner.sleep(2)
    mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP)
    mydevice.touchViewById('id/0x16',mydevice.DOWN_AND_UP)
    mydevice.type(num)
    mydevice.touchViewById('id/done',mydevice.DOWN_AND_UP)
    MonkeyRunner.sleep(3)
    #新增完成後判斷是否成功
    if (cmp(mydevice.getTextById('id/action_bar_title'),name) == 0):
        print "####TestResult:save "+name+" success!!!"
    else:
        print "####TestResult:save "+name+" FAILED!!!"  
    mydevice.press('KEYCODE_BACK', mydevice.DOWN_AND_UP)

指令碼執行

結果將儲存在log.txt檔案中

相關推薦

MonkeyRunnereclipse編寫monkeyrunner指令碼環境搭建

http://www.csdn123.com/html/itweb/20130815/60106_60105_60108.htm http://blog.csdn.net/robinzhou/article/details/6771120 http://www.dup2.o

VS2013C語言呼叫Python指令碼環境搭建、函式呼叫和呼叫demo.py指令碼an

#include <stdio.h> #include <stdlib.h> #include <string.h>#include <Python.h>int main(int argc, char** argv){int arg0 = 30;int arg1

EclpiseEclipseTomcat啟動失敗或者是重啟失敗

lis 占用 listening xiang 進程 ref min dos get    經常在Eclipse中遇到這樣的問題,tomcat重啟之後失敗,而且也停止不了。最好的解決辦法就是用DOS命令殺死進程。 比如下面這種情況: 1.查看進程I

安裝Redis4.0.10在Linux環境搭建

指定 conf 安裝 col style nbsp 0.10 clas fig 1.下載Redis後上傳到指定目錄 2.解壓 tar -zxvf redis-4.0.10.tar.gz 3.進入加壓後的目錄並編譯 cd redis-4.0.10 m

unpunix網路程式設計卷1-->環境搭建(ubuntu14.04)

學習unp網路程式設計,樹上的例子均存在#include "unp.h",故需要對環境進行配置。 2. 解壓並將unpv13e 移動到相應的資料夾下 3. 編譯 >$ cd unpv13e

Mybatis深入淺出Mybatis(三)——環境搭建

一、前言       前一篇部落格向大家介紹了Mybatis的架構——【Mybatis】深入淺出Mybatis(二)——Mybatis的框架,在這篇我們就開始通過一個例子來搭建一下Mybatis的環境。 二、環境要求 mybatis-3.2.7.ja

轉載:monkeyrunnereclipse運行monkeyrunner腳本之環境搭建(四)

導包 rep 是把 body tle cnblogs 9.png 解決方法 align 轉載自:lynnLi 的monkeyrunner之eclipse中運行monkeyrunner腳本之環境搭建(四) monkeyrunner腳本使用Python語法編寫,但它實際上是通

EclipseEclipsetomcat的Server配置(解決修改代碼不斷的重啟服務器)

重啟tomcat 都得 mage tom auto 單獨 java代碼 nbsp src       Eclipse有時候修改一點JS或者JSP都會自動重啟,有時候修改完JS或者JSP之後必須重啟服務器才生效,下面研究了server的一些選項之後徹底解決了這些問題,下面做

小技巧Eclipse 創建Maven項目後沒有WEB-INF文件夾以及web.xml文件

出現 可能 pan 3.0 開始 自動創建 TP 應該 xml文件 懶得截圖了,一張圖配下面步驟搞定。 1、右鍵項目,選擇propertities後選擇圖中①(被遮住了); 2、先不②勾選去掉,點擊Apply;然後在把②處勾選上。此時④位置會出現東東,點擊藍色超鏈接。填入

EclipseEclipse打開cmd窗口和terminal窗口

systems win 工具 alt UNC span The 正常 tab鍵補全   在IDEA的時候可以直接使用terminal打開類似於cmd窗口的功能,於是想著在eclipse也使用類似的功能。 1.Eclipse打開類似於cmd窗口的功能。(DOS)

Eclipseeclipse格式化程式碼配置方法

1、找到"Source",點選,在彈出的下拉框內,找到"Format",然後點選,或者快捷鍵ctrl+shift+F, 如果對單單一行的行首進行自動對齊,將滑鼠放到行首,按下Tab鍵即可。   2、這種方式比較好用,直接配置好後,開啟程式碼直接儲存,就會將程式碼自動格式化,個人

Jenkins——shell執行多個指令碼

前言   前面已經寫了一篇部落格   上篇部落格中只提到了在shell中只執行一個指令碼,生成對應的jtl檔案   並對其進行資料分析。   有些時候我們可能需要測試很多的指令碼,但是因為每

整理eclipse.ini/myeclipse.ini檔案引數配置zz

     今天下午查了一些關於優化MyEclipse速度的文章,受益匪淺。不過知其然也要知其所以然。比如說在提到通過修改myeclipse.ini檔案中引數-Xms,-Xmx,-PerSize的值時,這幾個引數具體是指什麼?在網上搜集了一些資料,現整理如下: 這涉及到JVM的

運維筆記Eclipsegit外掛的使用

我這個是比較新的版本,已經集成了EGit外掛,其他版本的可以自己安裝一下: 使用Eclipse Marketplace安裝: 用Install New Software安裝 安裝源 http://mirrors.ustc.edu.cn/eclipse/e

PythonPython的多行註釋文件編寫風格彙總

【筆記】Epytext風格比較緊湊(推薦);Google風格和numpy風格層次分明,但是比較長;================================什麼是docstring在軟體工程中,其實編碼所佔的部分是非常小的,大多是其它的事情,比如寫文件。文件是溝通的工具

Unity,使用Ngui 的預設字型Arial,顯示出錯;附帶字型替換指令碼

【原貼地址已失效  轉載過來備用】 Unity工程中的動態字型使用很方便,在一開始的工程中,為了減小遊戲包的大小,我們使用的是Unity內建的預設Arial字型,但是在遊戲上線測試後,很多玩家反饋個別機型字型顯示不完全,主要集中在 小米1代,OPPO,金立,中興等個別機

.Net碼農.NET執行js指令碼的方法

一、後臺註冊js指令碼 在專案開發中,遇到了問題,當使用了UpdatePanel控制元件後,直接在後臺輸出js指令碼報錯了。 大家都知道向客戶端輸出內容的方式很多,而大多數初學者會使用Respone.Write(string)。比如: 以下是程式碼片段:

圖文講解eclipse配置maven環境+匯入maven專案

1.檢測eclipse是否有maven環境 開啟import對話窗輸入maven,如果下面紅色方框裡有東西可以跳過下一步的elipse中配置maven環境,如果方框裡沒有東西,按照下一步在eclipse中配置maven環境後即可出現 2.在eclipse中配置mave

工具使用eclipse配置及使用tomcat

一.配置Tomcat 2.開啟Eclipse,單擊“window”選單,選擇下方的“Preferences” 3.找到Server下方的Runtime Environment,單擊右方的Add按鈕

js15個常用的正則表達式

顏色 字符 8.4 特殊字符 cnp 浮點數 == div mail 1 用戶名正則 //用戶名正則,4到16位(字母,數字,下劃線,減號) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //輸出 true console.log(uPa