├── README.md ├── log ├── MonkeyRunner-log-2013-08-02-11-00-30.txt ├── MonkeyRunner-log-2013-08-02-11-01-16.txt ├── MonkeyRunner-log-2013-08-02-11-05-01.txt ├── MonkeyRunner-log-2013-08-02-11-09-07.txt ├── MonkeyRunner-log-2013-08-02-11-12-20.txt ├── MonkeyRunner-log-2013-08-02-11-14-27.txt ├── SearchWordTest-log-2013-08-02-11-31-58.txt ├── SearchWordTest-log-2013-08-02-11-47-02.txt ├── SearchWordTest-log-2013-08-02-14-03-27.txt ├── SearchWordTest-log-2013-08-02-14-05-25.txt ├── TranslateTest-log-2013-08-02-11-32-58.txt ├── TranslateTest-log-2013-08-02-11-38-20.txt ├── TranslateTest-log-2013-08-02-11-40-34.txt ├── TranslateTest-log-2013-08-02-11-42-22.txt ├── TranslateTest-log-2013-08-02-11-48-07.txt ├── TranslateTest-log-2013-08-02-11-48-36.txt ├── TranslateTest-log-2013-08-02-11-52-34.txt ├── TranslateTest-log-2013-08-02-11-56-09.txt ├── TranslateTest-log-2013-08-02-12-00-01.txt ├── TranslateTest-log-2013-08-02-12-00-57.txt ├── TranslateTest-log-2013-08-02-13-41-05.txt ├── TranslateTest-log-2013-08-02-13-42-01.txt ├── TranslateTest-log-2013-08-02-13-42-40.txt ├── TranslateTest-log-2013-08-02-13-43-15.txt ├── TranslateTest-log-2013-08-02-13-43-53.txt ├── TranslateTest-log-2013-08-02-13-45-41.txt ├── TranslateTest-log-2013-08-02-13-46-22.txt ├── TranslateTest-log-2013-08-02-13-56-43.txt ├── TranslateTest-log-2013-08-02-13-58-13.txt ├── TranslateTest-log-2013-08-02-14-01-52.txt ├── TranslateTest-log-2013-08-02-14-02-20.txt ├── TranslateTest-log-2013-08-02-14-04-25.txt └── TranslateTest-log-2013-08-02-14-06-26.txt ├── monkey_playback.py ├── monkey_recorder.py ├── recorder.png ├── screenshots ├── TranslateTest.py-翻译语句截图2013-08-02-11-33-49.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-39-11.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-41-25.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-43-16.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-48-23.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-48-53.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-52-53.png ├── TranslateTest.py-翻译语句截图2013-08-02-11-56-28.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-41-24.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-42-20.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-42-59.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-43-34.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-44-12.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-46-00.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-46-41.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-57-02.png ├── TranslateTest.py-翻译语句截图2013-08-02-13-58-32.png ├── TranslateTest.py-翻译语句截图2013-08-02-14-02-39.png ├── TranslateTest.py-翻译语句截图2013-08-02-14-04-56.png ├── TranslateTest.py-翻译语句截图2013-08-02-14-06-45.png ├── 主页面截图2013-08-01-20-30-12.png ├── 主页面截图2013-08-01-20-34-27.png ├── 主页面截图2013-08-01-20-35-36.png ├── 主页面截图2013-08-01-20-37-46.png ├── 主页面截图2013-08-01-20-38-57.png ├── 主页面截图2013-08-02-11-01-59.png ├── 主页面截图2013-08-02-11-05-47.png ├── 主页面截图2013-08-02-11-09-53.png ├── 主页面截图2013-08-02-11-13-08.png ├── 主页面截图2013-08-02-11-15-10.png ├── 主页面截图2013-08-02-11-32-46.png ├── 主页面截图2013-08-02-11-47-56.png ├── 主页面截图2013-08-02-14-04-13.png └── 主页面截图2013-08-02-14-06-12.png ├── src ├── SearchWordTest.py └── TranslateTest.py ├── start-run.bat └── 有道词典V4.0.3.apk /README.md: -------------------------------------------------------------------------------- 1 | #Android自动化测试之MonkeyRunner# 2 | MonkeyRunner是Google Android SDK下的一个工具,用于自动化测试Android程序。 3 | 4 | Monkeyrunner工具提供了一套API,使用这些api写出的Python程序可以在黑盒地控制Android设置和模拟器。有了Monkeyrunner,我们可以通过python语句控制apk包的安装和卸载、启动app、向app发送各种动作指令、截取图片并保存。 5 | 6 | Monkeyrunner和Monkey不同,Monkey是直接运行在adb shell中的命令,它随机的生成用户或者系统的各种随机事件,而MonkeyRunner则可以通过api来产生特定命令和事件来控制设备和模拟器。 7 | 8 | MonkeyRunner在android测试中有下面特点: 9 | 10 | + 支持多设备: API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。 11 | + 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。 12 | + 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。 13 | + 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。 14 | 您还可以向monkeyrunner API中添加您自己的类。我们将在[使用插件扩展monkeyrunner](http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html#Plugins)一节中对此进行详细讨论。 15 | 16 | monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython允许monkeyrunnerAPI与Android框架轻松的进行交互。使用Jython,您可以使用Python语法来获取API中的常量、类以及方法。 17 | 18 | ###一个简单的MonkeyRunner的例子### 19 | 下面是个monkeyrunner的代码样例,下面代码包含了,连接设备、安装apk包、启动程序、发送键盘指令、截图、保存截图。 20 | 21 | # python引入monkeyRunner模块 22 | from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 23 | 24 | # 连接设备, 获得一个MonkeyDevice对象 25 | device = MonkeyRunner.waitForConnection() 26 | 27 | # 安装apk包. 返回值是boolean,可以判断是否安装成功 28 | device.installPackage('myproject/bin/MyApplication.apk') 29 | 30 | # sets a variable with the package's internal name 31 | package = 'com.example.android.myapplication' 32 | 33 | # sets a variable with the name of an Activity in the package 34 | activity = 'com.example.android.myapplication.MainActivity' 35 | 36 | # sets the name of the component to start 37 | runComponent = package + '/' + activity 38 | 39 | # 启动应用程序 40 | device.startActivity(component=runComponent) 41 | 42 | # 按下手机的菜单键 43 | device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) 44 | 45 | # 截图 46 | result = device.takeSnapshot() 47 | 48 | # 保存截图 49 | result.writeToFile('myproject/shot1.png','png') 50 | 51 | ###常用API### 52 | 53 | #需要引入的模块 54 | from com.android.monkeyrunner import MonkeyRunner as mr 55 | from com.android.monkeyrunner import MonkeyDevice as md 56 | from com.android.monkeyrunner import MonkeyImage as mi 57 | 58 | #等待设备连接,30秒超时,后面是设备名称,该名称可以通过执行命令行`adb devices`获得 59 | device = mr.waitForConnection(30,'123123135002735') 60 | 61 | #安装apk包 62 | device.installPackage('d:/有道词典V4.0.3.apk'.decode('utf-8')) 63 | 64 | #卸载应用程序 65 | device.removePackage('com.youdao.dict') 66 | 67 | #启动应用程序 68 | device.startActivity(component='com.youdao.dict/.activity.DictSplashActivity') 69 | 70 | #等待程序加载,5秒 71 | mr.sleep(5) 72 | 73 | #拖动操作,四个参数,前两个是初始点、结束点坐标,0.5是持续时间,1是步数 74 | device.drag((550,500),(100,500), 0.5, 1) 75 | 76 | #触摸操作,三个参数,X坐标、Y坐标,触摸类型 77 | device.touch(80, 1050, "DOWN_AND_UP") 78 | 79 | #截图并保存,注意如果名字中有中文,需要进行utf-8编码,否则乱码 80 | now = time.strftime("%Y-%m-%d-%H-%M-%S") 81 | mainPageImage = device.takeSnapshot() 82 | mainPageImage.writeToFile("d:/"+"主页面截图".decode("utf-8")+now+".png", "png") 83 | 84 | #点击后退键,键盘码详情可以去查sdk帮助文档,路径:android-sdk-windows/docs/reference/android/view/KeyEvent.html 85 | device.press("KEYCODE_BACK", "DOWN_AND_UP") 86 | 87 | #将日志输出到外部文件,在python中使用中文,需要在文件开头将编码设置为utf-8,否则乱码 88 | log = open('d:/monkenyLog.txt', 'w') 89 | log.write("等待手机连接...、\n") 90 | log.close() 91 | 92 | #截图比较,sameAs()第二个参数表示相似度,0表示完全不相似,1表示完全相同 93 | imageTrue = mr.loadImageFromFile('d:/shot/true.png') 94 | if(imageTrue.sameAs(mainPageImage, 0.75)): 95 | log.write('截图比较成功\n') 96 | else: 97 | log.write('截图比较失败\n') 98 | 其他详细信息可参加Android sdk文档,路径`android-sdk-windows/docs/tools/help/monkeyrunner_concepts.html` 99 | 100 | ###录制脚本### 101 | MonkeyRunner自身提供脚本录制功能,即MonkeyRecorder。 102 | 103 | 将下面代码保存成recorder.py 104 | from com.android.monkeyrunner import MonkeyRunner as mr 105 | from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder 106 | device = mr.waitForConnection() 107 | recorder.start(device) 108 | ![MonkeyRecorder](recorder.png) 109 | 110 | 录制产生的结果,myRecorder.mr: 111 | 112 | TOUCH|{'x':92,'y':936,'type':'downAndUp',} 113 | TOUCH|{'x':357,'y':688,'type':'downAndUp',} 114 | TOUCH|{'x':285,'y':82,'type':'downAndUp',} 115 | TYPE|{'message':'hello',} 116 | TOUCH|{'x':679,'y':82,'type':'downAndUp',} 117 | 118 | 想要录制回放,还要借助`monkey_playback.py`文件,这个文件用来连接手机,初始化一些变量,解析我们的myRecorder.mr。 119 | 使用命令`monkeyrunner monkey_playback.py myRecorder.mr`即可运行。 120 | ###总结### 121 | MonkeyRunner提供的操作有限,适合重复性、短路径的测试,不适合连续性的操作,由于type和drag方法的不稳定,很容易偏离我们的预期。MonkeyRunner操作依赖于控件坐标(也可以通过id,比较耗时),一旦UI发生改变,脚本无法使用。 122 | 123 | Monkeyrunner的等待机制`MonkeyRunner.sleep(5)`,无法更加友好地等待;MonkeyRunner不提供结果断言,我们只能通过截图比较,无法摆脱人工干预。 124 | 125 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-00-30.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-01-16.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-05-01.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较成功 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-09-07.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较成功 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-12-20.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较成功 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/MonkeyRunner-log-2013-08-02-11-14-27.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/SearchWordTest-log-2013-08-02-11-31-58.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/SearchWordTest-log-2013-08-02-11-47-02.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/SearchWordTest-log-2013-08-02-14-03-27.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | -------------------------------------------------------------------------------- /log/SearchWordTest-log-2013-08-02-14-05-25.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击单词输入框 13 | 输入单词linux 14 | 点击搜索按钮 15 | 截图保存到d:/python/screenshots/ 16 | 截图比较失败 17 | 向上滑动,查看结果 18 | 点击手机的后退按钮 19 | 点击手机的后退按钮 20 | 点击手机的后退按钮 21 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-32-58.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击翻译标签页点击翻译输入框输入一段中文点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 13 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-38-20.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击翻译标签页点击翻译输入框输入一段中文点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 13 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-40-34.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击翻译标签页点击翻译输入框输入一段中文点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 13 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-42-22.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 安装apk包... 3 | 启动有道词典 4 | 点击接受按钮,接受用户服务条款 5 | 现在页面展示的是PPT页面,需要向左滑动 6 | 向左滑动 7 | 向左滑动 8 | 向左滑动 9 | 取消安装有道云笔记的checkbox 10 | 点击立即体验按钮,进入程序主页面 11 | 等待主页面加载完毕 12 | 点击翻译标签页点击翻译输入框输入一段中文点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 13 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-48-07.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-48-36.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-52-34.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-11-56-09.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-12-00-01.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/log/TranslateTest-log-2013-08-02-12-00-01.txt -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-12-00-57.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图 -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-41-05.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-42-01.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-42-40.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-43-15.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-43-53.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-45-41.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-46-22.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-56-43.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-13-58-13.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框输入一段中文 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-14-01-52.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框monkeyrunner无法输入中文,只能输入ascii字符 4 | 点击搜索按钮等待查询结果 -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-14-02-20.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框monkeyrunner无法输入中文,只能输入ascii字符 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-14-04-25.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框monkeyrunner无法输入中文,只能输入ascii字符 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /log/TranslateTest-log-2013-08-02-14-06-26.txt: -------------------------------------------------------------------------------- 1 | 等待手机连接...、 2 | 启动有道词典 3 | 点击翻译标签页点击翻译输入框monkeyrunner无法输入中文,只能输入ascii字符 4 | 点击搜索按钮等待查询结果对查询结果截图点击手机的后退按钮 5 | 点击手机的后退按钮 6 | 点击手机的后退按钮 7 | -------------------------------------------------------------------------------- /monkey_playback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env monkeyrunner 2 | # coding=utf-8 3 | # Copyright 2010, The Android Open Source Project 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import sys 18 | import time 19 | from com.android.monkeyrunner import MonkeyRunner as mr 20 | from com.android.monkeyrunner import MonkeyDevice as md 21 | from com.android.monkeyrunner import MonkeyImage as mi 22 | from com.android.monkeyrunner.easy import EasyMonkeyDevice 23 | from com.android.monkeyrunner.easy import By 24 | from com.android.chimpchat.hierarchyviewer import HierarchyViewer 25 | 26 | # The format of the file we are parsing is very carfeully constructed. 27 | # Each line corresponds to a single command. The line is split into 2 28 | # parts with a | character. Text to the left of the pipe denotes 29 | # which command to run. The text to the right of the pipe is a python 30 | # dictionary (it can be evaled into existence) that specifies the 31 | # arguments for the command. In most cases, this directly maps to the 32 | # keyword argument dictionary that could be passed to the underlying 33 | # command. 34 | 35 | # Lookup table to map command strings to functions that implement that 36 | # command. 37 | CMD_MAP = { 38 | 'TOUCH': lambda dev, arg: dev.touch(**arg), 39 | 'DRAG': lambda dev, arg: dev.drag(**arg), 40 | 'PRESS': lambda dev, arg: dev.press(**arg), 41 | 'TYPE': lambda dev, arg: dev.type(**arg), 42 | 'WAIT': lambda dev, arg: mr.sleep(**arg) 43 | } 44 | 45 | # Process a single file for the specified device. 46 | def process_file(fp, device): 47 | for line in fp: 48 | (cmd, rest) = line.split('|') 49 | try: 50 | # Parse the pydict 51 | rest = eval(rest) 52 | except: 53 | print 'unable to parse options' 54 | continue 55 | 56 | if cmd not in CMD_MAP: 57 | print 'unknown command: ' + cmd 58 | continue 59 | 60 | CMD_MAP[cmd](device, rest) 61 | 62 | 63 | def main(): 64 | file = sys.argv[1] 65 | fp = open(file, 'r') 66 | 67 | #中文 68 | device = mr.waitForConnection() 69 | 70 | process_file(fp, device) 71 | fp.close() 72 | 73 | if __name__ == '__main__': 74 | main() 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /monkey_recorder.py: -------------------------------------------------------------------------------- 1 | from com.android.monkeyrunner import MonkeyRunner as mr 2 | from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder 3 | device = mr.waitForConnection(5,"021YLJ4C35002735") 4 | recorder.start(device) -------------------------------------------------------------------------------- /recorder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/recorder.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-33-49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-33-49.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-39-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-39-11.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-41-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-41-25.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-43-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-43-16.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-48-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-48-23.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-48-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-48-53.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-52-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-52-53.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-56-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-11-56-28.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-41-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-41-24.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-42-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-42-20.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-42-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-42-59.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-43-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-43-34.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-44-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-44-12.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-46-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-46-00.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-46-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-46-41.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-57-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-57-02.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-58-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-13-58-32.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-02-39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-02-39.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-04-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-04-56.png -------------------------------------------------------------------------------- /screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-06-45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/TranslateTest.py-翻译语句截图2013-08-02-14-06-45.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-01-20-30-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-01-20-30-12.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-01-20-34-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-01-20-34-27.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-01-20-35-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-01-20-35-36.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-01-20-37-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-01-20-37-46.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-01-20-38-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-01-20-38-57.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-01-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-01-59.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-05-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-05-47.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-09-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-09-53.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-13-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-13-08.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-15-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-15-10.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-32-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-32-46.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-11-47-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-11-47-56.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-14-04-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-14-04-13.png -------------------------------------------------------------------------------- /screenshots/主页面截图2013-08-02-14-06-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/screenshots/主页面截图2013-08-02-14-06-12.png -------------------------------------------------------------------------------- /src/SearchWordTest.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env monkeyrunner 2 | # coding=utf-8 3 | # Copyright 2010, The Android Open Source Project 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import sys 18 | import time 19 | from com.android.monkeyrunner import MonkeyRunner as mr 20 | from com.android.monkeyrunner import MonkeyDevice as md 21 | from com.android.monkeyrunner import MonkeyImage as mi 22 | 23 | from com.android.monkeyrunner.easy import EasyMonkeyDevice 24 | from com.android.monkeyrunner.easy import By 25 | from com.android.chimpchat.hierarchyviewer import HierarchyViewer 26 | 27 | def main(): 28 | screenShotPath = "d:/python/screenshots/" 29 | #输出日志 30 | now = time.strftime("%Y-%m-%d-%H-%M-%S") 31 | logPath = "d:/python/log/" 32 | 33 | names = sys.argv[0].split('\\') 34 | filename = names[len(names)-1] 35 | print("++++++++++++++++++++++++++++++++++++++") 36 | print("Start execute "+filename) 37 | filename.replace('.py', '') 38 | log = open(logPath+filename[:-3]+"-log-"+now+".txt", "w") 39 | device = mr.waitForConnection(30,'021YLJ4C35002735') 40 | log.write("等待手机连接...、\n") 41 | device.installPackage('d:/有道词典V4.0.3.apk'.decode('utf-8')) 42 | log.write("安装apk包...\n") 43 | print("The apk has installed successfully") 44 | device.startActivity(component='com.youdao.dict/.activity.DictSplashActivity') 45 | log.write("启动有道词典\n") 46 | #等待app启动完毕 47 | mr.sleep(5) 48 | 49 | log.write("点击接受按钮,接受用户服务条款\n") 50 | device.touch(500, 1200,"DOWN_AND_UP"); 51 | mr.sleep(2) 52 | 53 | log.write("现在页面展示的是PPT页面,需要向左滑动\n") 54 | #参数分别为初始点和结束点,持续时间和步数 55 | for i in range(1, 4): 56 | log.write("向左滑动\n") 57 | device.drag((550,500),(100,500), 0.5, 1) 58 | mr.sleep(2) 59 | 60 | log.write("取消安装有道云笔记的checkbox\n") 61 | device.touch(80, 1050, "DOWN_AND_UP") 62 | 63 | log.write("点击立即体验按钮,进入程序主页面\n") 64 | device.touch(400, 800, "DOWN_AND_UP") 65 | 66 | log.write("等待主页面加载完毕\n") 67 | mr.sleep(3) 68 | 69 | 70 | log.write("点击单词输入框\n") 71 | device.touch(200, 700, "DOWN_AND_UP") 72 | mr.sleep(1) 73 | 74 | log.write("输入单词linux\n") 75 | device.type("linux") 76 | print("type the word 'linux'") 77 | 78 | log.write("点击搜索按钮\n") 79 | device.touch(680, 100, "DOWN_AND_UP") 80 | mr.sleep(5) 81 | 82 | log.write("截图保存到"+screenShotPath+"\n") 83 | print("Take a picture") 84 | now = time.strftime("%Y-%m-%d-%H-%M-%S") 85 | mainPageImage = device.takeSnapshot() 86 | 87 | imageTrue = mr.loadImageFromFile('d:/shot/true.png') 88 | if(imageTrue.sameAs(mainPageImage, 0.75)): 89 | log.write('截图比较成功\n') 90 | else: 91 | log.write('截图比较失败\n') 92 | mainPageImage.writeToFile(screenShotPath+"主页面截图".decode("utf-8")+now+".png", "png") 93 | 94 | log.write("向上滑动,查看结果\n") 95 | for i in range(1, 4): 96 | device.drag((300,100), (300, 800), 0.5, 1); 97 | mr.sleep(1) 98 | 99 | for i in range(1, 4): 100 | log.write("点击手机的后退按钮\n") 101 | device.press("KEYCODE_BACK", "DOWN_AND_UP") 102 | mr.sleep(2) 103 | log.close() 104 | #device.removePackage('com.youdao.dict') 105 | print("The package has removed successfully!") 106 | print(filename+" over!\n\n") 107 | if __name__ == '__main__': 108 | main() -------------------------------------------------------------------------------- /src/TranslateTest.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env monkeyrunner 2 | # coding=utf-8 3 | # Copyright 2010, The Android Open Source Project 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | import sys 18 | import time 19 | from com.android.monkeyrunner import MonkeyRunner as mr 20 | from com.android.monkeyrunner import MonkeyDevice as md 21 | from com.android.monkeyrunner import MonkeyImage as mi 22 | 23 | from com.android.monkeyrunner.easy import EasyMonkeyDevice 24 | from com.android.monkeyrunner.easy import By 25 | from com.android.chimpchat.hierarchyviewer import HierarchyViewer 26 | 27 | def main(): 28 | screenShotPath = "d:/python/screenshots/" 29 | #输出日志 30 | now = time.strftime("%Y-%m-%d-%H-%M-%S") 31 | logPath = "d:/python/log/" 32 | 33 | names = sys.argv[0].split('\\') 34 | filename = names[len(names)-1] 35 | print("++++++++++++++++++++++++++++++++++++++") 36 | print("Start execute "+filename) 37 | filename.replace('.py', '') 38 | log = open(logPath+filename[:-3]+"-log-"+now+".txt", "w") 39 | device = mr.waitForConnection(30,'021YLJ4C35002735') 40 | log.write("等待手机连接...、\n") 41 | 42 | device.startActivity(component='com.youdao.dict/.activity.DictSplashActivity') 43 | log.write("启动有道词典\n") 44 | #等待app启动完毕 45 | mr.sleep(5) 46 | 47 | log.write("点击翻译标签页") 48 | device.touch(250, 100, "DOWN_AND_UP") 49 | mr.sleep(1) 50 | 51 | log.write("点击翻译输入框") 52 | device.touch(300, 500, "DOWN_AND_UP") 53 | mr.sleep(2) 54 | 55 | log.write("monkeyrunner无法输入中文,只能输入ascii字符\n") 56 | device.type("Hello") 57 | device.press("KEYCODE_SPACE", "DOWN_AND_UP") 58 | device.type("world") 59 | print("input 'hello world'") 60 | mr.sleep(2) 61 | log.write("点击搜索按钮") 62 | print('enter the search button') 63 | device.touch(500, 200, "DOWN_AND_UP") 64 | log.write("等待查询结果") 65 | mr.sleep(5) 66 | 67 | log.write("对查询结果截图") 68 | resultImage = device.takeSnapshot() 69 | now = time.strftime("%Y-%m-%d-%H-%M-%S") 70 | resultImage.writeToFile(screenShotPath+filename+"-翻译语句截图".decode("utf-8")+now+".png", "png") 71 | print("Take a picture") 72 | 73 | for i in range(1, 4): 74 | log.write("点击手机的后退按钮\n") 75 | device.press("KEYCODE_BACK", "DOWN_AND_UP") 76 | mr.sleep(2) 77 | 78 | log.close() 79 | 80 | print(filename+" over!\n\n") 81 | if __name__ == '__main__': 82 | main() -------------------------------------------------------------------------------- /start-run.bat: -------------------------------------------------------------------------------- 1 | for /F "tokens=*" %%i in ('dir "d:/python/src" /S /B') do monkeyrunner %%i -------------------------------------------------------------------------------- /有道词典V4.0.3.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeetrack/monkeyrunner/379822f5b0408596a817dd874ed311ede96bc352/有道词典V4.0.3.apk --------------------------------------------------------------------------------