monkeyrunner 使用id——calculator.py 实例

来源:互联网 发布:合肥中伟科研究院 知乎 编辑:程序博客网 时间:2024/06/08 06:43

把前段时间的研究成果记录一下。主要是通过调用应用软件的ID进行操作软件,此操作需要用到以下类和工具:

  1、安卓自有目录\tools\hierarchyviewer.bat工具可以用来查看应用程序的ID。

  操作hierarchyviewer.bat工具步骤:

  (1)、启动安卓模拟器,打开需要查看ID的软件界面。此处以google搜索界面为例。然后双击打开hierarchyviewer.bat,显示搜索界面的activity,即下图左侧被选中的项,表示搜索界面的完整包名。


(2)点击Load View Hierarchy按钮,展现该搜索界面的层级图。选中指定的控件,查看ID名称。

  在属性显示区域可以看到各个控件所处的坐标位置,以及可以查看模拟器上任务栏的高度,这些信息可以用于坐标计算中。

  2、通过EasyMonkeyDevice类和By类来调用控件ID。

  一些常用控件的写法如下:

  (1)输入框的ID写法:

  easy_device.type(By.id('id/name_text),'zhangsan')

  (2)复选框/单选/按钮的ID写法:

  easy_device.touch(By.id('id/login_button'),MonkeyDevice.DOWN_AND_UP)

  (3)当两个ID名称相同时,可以使用层级进行定位

  easy_device.touch(By.id('id/parent_button'),MonkeyDevice.DOWN_AND_UP,By.id('id/current_button'),MonkeyDevice.DOWN_AND_UP)

  通过ID进行计算器操作示例calculator.py

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevicefrom com.android.monkeyrunner.easy import EasyMonkeyDevicefrom com.android.monkeyrunner.easy import Byfrom com.android.chimpchat.hierarchyviewer import HierarchyViewer#from com.android.hierarchyviewerlib.device import ViewNodedevice = MonkeyRunner.waitForConnection()package = 'com.android.calculator2'activity = 'com.android.calculator2.Calculator'runComponent = package + '/' + activitydevice.startActivity(component=runComponent)MonkeyRunner.sleep(3.0)easy_device = EasyMonkeyDevice(device)  #init easymonkeydevice object must start activity at first.Because the init method will getHierarchyViewer();easy_device.touch(By.id('id/digit7'),MonkeyDevice.DOWN_AND_UP)easy_device.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)easy_device.touch(By.id('id/digit8'),MonkeyDevice.DOWN_AND_UP)easy_device.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP)MonkeyRunner.sleep(1.0)pic = device.takeSnapshot()pic.writeToFile('D:\\monkeyrunner\\result.png','png')print 'test finished!'

3、运行文件模拟计算7*8=56,生成result.png。monkeyrunner   calculator.py

  用ID进行参数差不多都是这个思路。但是对于列表、或者弹出框则无法直接通过点击ID操作成功,需要计算ID的坐标。

检验一台手机是否开启了View Server的办法为:
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 '........')" 说明View Server处于关闭状态
若返回值是:Result: Parcel(00000000 00000001 '........')" 说明View Server处于开启状态
使用以下命令打开View Server:
adb shell service call window 1 i32 4939
使用以下命令关闭View Server:
adb shell service call window 2 i32 4939

执行:

1)打开View server 服务 :

adb shell service call window 1 i32 4939

2)cmd 》monkeyrunner calculator.py》回车