Android自動化テストMonkeyRunner(三)---python基本文法


#プログラム導入用モジュール
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 
#プログラムに使用されるモジュール、別名の使用
from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md from com.android.monkeyrunner import MonkeyImage as miインポートしたモジュールに別名を付けた場合は、別名を使用する必要があります.そうしないとエラーが発生します.例えばデバイスやシミュレータを接続し、上記の別名を付けた場合、device=mr.waitForConnection()
 
#デバイスまたはシミュレータに接続
#パラメータ1:タイムアウト時間、単位秒、浮動小数点数.デフォルトは無期限に待機します.#パラメータ2:シリアルdeviceid、指定したデバイス名.デフォルトは現在のデバイスです(携帯電話がUSBケーブルでPCに接続され、次にシミュレータに接続されるなど).デフォルト接続:device=MonkeyRunner.waitForConnection()#パラメータ接続:device=MonkeyRunner.waitForConnection(1.0,'4df74b8XXXXXXX') 
#デバイスまたはシミュレータへのAPKのインストール
次の2つの方法は正しいデバイスです.installPackage('E:/JAVA/monkeyrunner/Test1/ThinkDrive_new.apk') device.installPackage('E:\JAVA\monkeyrunner\Test 1\ThinkDrive_new.apk')#パラメータは絶対パスでも相対パスでも構いません
#デバイスまたはシミュレータのAPKのアンインストール
#パラメータはAPKパッケージ名device.removePackage('cn.richinfo.thinkdrive') 
#任意のActivityを起動
#device.startActivity(component="パッケージ名/起動Activity")#以下の2種類はOKです.startActivity(component="cn.richinfo.thinkdrive/cn.richinfo.thinkdrive.ui.activities.NavigateActivity") device.startActivity(component="cn.richinfo.thinkdrive/.ui.activities.NavigateActivity")
  
#携帯電話のスクリーンショット
#デバイスのシールドバッファを取得し、ディスプレイ全体のシールドキャプチャを生成します.(スクリーンショット)result=device.takeSnapshot()#はMonkeyImageオブジェクト(ドットマトリクスパッケージ)を返します.ファイルresult.writeToFile('E:\JAVA\monkeyrunner\Test 1\Test 1_001.png','png')に図を保存するには、次のコマンドを使用します.
#一時停止
#現在実行中のプログラムで指定された秒数を一時停止#MonkeyRunner.sleep(秒数、浮動小数点数)
MonkeyRunner.sleep(5)
  
#文字列をキーボードに送信
#device.type('文字列')device.type('Findyou')
 
#デバイス画面を起動
スクリーンをロックすると、スクリーンが閉じ、下のコマンドでdeviceを起動できます.wake()
 
#携帯をリセット
device.reboot()
 
#シミュレーションスライド
#device.drag(X,Y,D,S)#X開始座標#Y終了座標#Dドラッグ持続時間(秒単位)、デフォルト1.0秒#S補間点の場合の手順.デフォルトは10 deviceです.drag((100,1053),(520,1053),0.1,10)
 
#指定された場所でタッチイベントを送信
#device.touch(x,y,タッチイベントタイプ)#x,yの単位は画素#タッチイベントタイプであり、以下のFindyou対deviceを参照してください.pressはdeviceを記述する.touch(520,520,'DOWN_AND_UP')
 
#指定されたタイプの指定キーを送信するイベント
#device.press(パラメータ1:キーコード、パラメータ2:タッチイベントタイプ)#パラメータ1:android.view.KeyEvent#パラメータ2は、TouchPressType()が返すタイプ-タッチイベントタイプの場合、3種類あります.1.DOWNはDOWNイベントを送信する.DOWNイベントタイプをデバイスに送信するように指定し、対応するキーまたはタッチスクリーンを押します.2、UPはUPイベントを送信します.UPイベントタイプをデバイスに送信することを指定し、キーを1つ解放したり、画面から持ち上げたりします.3、DOWN_AND_UPはDOWNイベントを送信し、UPイベントを送信する.入力キーまたはクリック画面に対応します.
以上の3つのイベントをpress()パラメータまたはtouch()パラメータとしてHOMEキーdeviceを押す.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)#BACKキーdeviceを押す.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)#ナビゲーションキーdeviceを押します.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP)#上ナビゲーションキーdeviceを押す.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP)#OKキーdeviceを押す.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP) 
 
KeyCode: 
ホームキーKEYCODE_HOME 
backキーKEYCODE_BACK 
sendキーKEYCODE_CALL 
endキーKEYCODE_ENDCALL 
上ナビゲーションキーKEYCODE_DPAD_UP 
下ナビゲーションキーKEYCODE_DPAD_DOWN 
左ナビゲーションKEYCODE_DPAD_LEFT 
右ナビゲーションキーKEYCODE_DPAD_RIGHT  
OKキーKEYCODE_DPAD_CENTER 
上音量キーKEYCODE_VOLUME_UP  
下音量キーKEYCODE_VOLUME_DOWN 
PowerキーKEYCODE_POWER 
cameraキーKEYCODE_CAMERA 
menuキーKEYCODE_MENU
#親ノードidと子ノードindexで対応する子ノードを見つける
def getChildView(self, parentId, *childSeq):	
	    hierarchyViewer = device.getHierarchyViewer()
            str_getchildview="hierarchyViewer.findViewById('" + parentId +"')"  		
            for index in childSeq:       
              str_getchildview+=('.children[' + str(index) + ']')  
            print (str_getchildview)			  
            exec 'child_view=' + str_getchildview
            return child_view	

#親ノードから子ノードを見つけ、動的に変化する個数制御
	    hierarchy_viewer = easy_device.getHierarchyViewer()
	    view_node = hierarchy_viewer.findViewById('id/linearLayoutTop')
	    items_node = view_node.children  #   view    
            lenth = len(items_node)          #   view   
            print ("lenth=",lenth) 

#idを指定して内容を入力
	tool.touchView('id/productnum_ET')  #    id View
	device.press('KEYCODE_DEL',MonkeyDevice.DOWN_AND_UP)  #      
	easy_device.type(By.id('id/productnum_ET'),'2')      #      

#指定したコントロールの内容を取得し、内容に応じて対応する
	shopprice = str(easy_device.getText(By.id('id/shopcar_allprice_text')))  #    
	if shopprice!="¥0.0 ": 
	   tool.touchView('id/shopcar_toPay_text')
	else:
           print("     0")

後記:
自動化テストを実現するには,idのメンテナンスが煩雑である.可能な限りidを実現するには1回しか書く必要はありません.