Android 自动化测试(3)<monkeyrunner> 根据ID查找对象&touch&type (python)

我在之前的两篇文章中用java来实现过 Android 自动化测试(1)如何安装和卸载一个应用(java)Android 自动化测试(2)根据ID查找对象(java)
但是本质上都是用monkeyrunner对应的java lib 来实现的,但是相关的文档非常少,如果真的要用monkeyrunner来做功能性的自动化测试,强烈还是推荐使用python语言

1、monkey runner

The monkeyrunner tool provides an API for writing programs that control an Android device or emulator from outside of Android code.

With monkeyrunner, you can write a Python program that installs an Android application or test package, runs it,

sends keystrokes to it, takes screenshots of its user interface, and stores screenshots on the workstation.

The monkeyrunner tool is primarily designed to test applications and devices at the functional/framework level and for running unit test suites,

but you are free to use it for other purposes.

monkeyrunner 工具提供了一个从Android源码外部写程序控制一个Android设备或者模拟器的API。

你可以用monkeyrunner写一个Python程序,来装一个Android应用和测试包,运行它,发key事件,截屏,存在本地。

monkeyrunner工具的设计起源于在功能/框架层面来测试应用和设备,和跑单元测试的测试套件

2、样例实现

2.1代码实现功能: 进入robot dream的页面mainActivity,找到id为center_image 的按钮发生点击事件,然后对弹出的对话框中再次找到id为button1的按钮,进行二次确认。

from com.android.monkeyrunner.easy import EasyMonkeyDevice, By
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

if __name__ == '__main__':

    import codecs
    codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)

    print ('test start')
    device = MonkeyRunner.waitForConnection()

    easyMonkey = EasyMonkeyDevice(device)
    print ('start robot dream mainActivity')

    device.shell('am start com.robot.dream/com.robot.dream.mainActivity')

    MonkeyRunner.sleep(3)
    #easyMonkey.touch(MonkeyDevice.DOWN_AND_UP, By.id("id/center_image"));

    by = By.id("id/center_image");
    print (by)
    easyMonkey.touch(by,MonkeyDevice.DOWN_AND_UP)

    MonkeyRunner.sleep(3)

    hierachy_view = device.getHierarchyViewer()
    print(hierachy_view)

    view_node = hierachy_view.findViewById('id/center_image')
    items_node = view_node.children
    print (len(view_node.children))

    print ('touch 2')
    easyMonkey.touch(by,MonkeyDevice.DOWN_AND_UP)

    MonkeyRunner.sleep(3)

    by2 = By.id('id/button1')
    print (by2)
    print (easyMonkey.visible(by2))

    vn2 = hierachy_view.findViewById('id/button1')
    print (dir(vn2))
    print (getattr(vn2, 'name'))
    print (vn2.id)

    easyMonkey.touch(by2, MonkeyDevice.DOWN_AND_UP)

    MonkeyRunner.sleep(3)

2.2 代码实现功能: 进入robot dream的登陆页面LoginActivity,根据id为login_account找到登陆编辑框TextEditor输入用户名abc, 根据id为login_pwd找到密码编辑框TextEditor输入密码abc123, 最后找到id为login_button的登陆按钮,成功登陆

from com.android.monkeyrunner.easy import EasyMonkeyDevice, By
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

if __name__ == '__main__':
    import codecs
    codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)

    print ('test start')
    device = MonkeyRunner.waitForConnection()
    easyMonkey = EasyMonkeyDevice(device)

    print ('start login')
    device.shell('am start com.robot.dream/com.robot.dream.LoginActivity')

    MonkeyRunner.sleep(3)

    by = By.id("id/login_account")
    print (easyMonkey.visible(by))
    easyMonkey.type(by,'abc')
    MonkeyRunner.sleep(1)
    device.press('KEYCODE_ENTER')
    MonkeyRunner.sleep(1)
    device.press('KEYCODE_BACK')
    MonkeyRunner.sleep(1)

    by2 = By.id('id/login_pwd')
    print (easyMonkey.visible(by2))
    easyMonkey.type(by2,"abc123")
    MonkeyRunner.sleep(1)
    device.press('KEYCODE_ENTER')
    MonkeyRunner.sleep(1)
    device.press('KEYCODE_BACK')
    MonkeyRunner.sleep(1)

    by3 = By.id('id/login_button')
    print (easyMonkey.visible(by3))
    easyMonkey.touch(by3,MonkeyDevice.DOWN_AND_UP)
    MonkeyRunner.sleep(1)

    device.press('KEYCODE_BACK')

3、总结:

使用monkeyrunner 使用id来查找控件,使用上EasyMonkeyDevice的Touch、Type等几个基本操作,就可以完成很多基本的功能性测试了。

使用monkeyrunner 的好处,测试程序运行的环境是真实的场景下的环境。

使用monkeyrunner的局限性,无法像单元测试那样通过Assert来进行功能校验。

时间: 2024-12-28 22:01:25

Android 自动化测试(3)<monkeyrunner> 根据ID查找对象&touch&type (python)的相关文章

Android自动化测试工具monkeyrunner的基本使用

前几天和同事一起研究了下monkeyrunner的基本使用,下面用一个简单的monkeyrunner例子和大家共同分享一下(基本操作,大神们可以飘过~),程序将安装一个Android应用包(以搜食记为例),并进行一些简单的操作~~~如有错误欢迎大家纠正 # 导入此程序所需的模块 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice,MonkeyImage from com.android.monkeyrunner.easy

Android 自动化测试(2)根据ID查找对象(java)

之前一篇文章写的是 Android 自动化测试(1)如何安装和卸载一个应用(java) ,下面再探索一下如果在普通java应用程序中,根据ID来查找对象 1.类库依赖: The library dependencies are: chimpchat.jar,common.jar,ddmlib.jar,guava-13.0.1.jar,sdklib.jar,hierchyviewer2lib.jar They can all be found in the sdk/tools/lib subdir

Android 自己的自动化测试(2)依据ID查找对象(java)

前一篇文章是写 Android 自己的自动化测试(1)如何安装和卸载应用程序(java) ,以下再探索一下假设在普通java应用程序中,依据ID来查找对象 1.类库依赖: The library dependencies are: chimpchat.jar,common.jar,ddmlib.jar,guava-13.0.1.jar,sdklib.jar,hierchyviewer2lib.jar They can all be found in the sdk/tools/lib subdi

Android 自动化测试(4)&lt;uiautomator&gt; 单元测试

在之前的系列文章中,我介绍过用java来实现过 Android 自动化测试(1)如何安装和卸载一个应用(java).Android 自动化测试(2)根据ID查找对象(java):然后又介绍了用python语言来实现Android 自动化测试(3) 根据ID查找对象&touch&type (python).还说过后续要写点关于单元测试和代码覆盖测试的文章.今天要介绍的就是单元测试. 1. 概要 做过java单元测试的同学,使用Android的单元测试比较简单,参见 如何进行Android单元

Android自动化测试 - MonkeyRunner(二) 锤子便签测试脚本

来源于:http://testerhome.com/topics/878 1 # encoding=utf-8 2 3 4 #导入python中自带的time模块和sys模块,脚本中都要用到它们. 5 import time 6 import sys 7 #MonkeyRunner自带的三个api 8 from com.android.monkeyrunner import MonkeyRunner ,MonkeyDevice ,MonkeyImage 9 10 11 #这个函数时确认年月日时分

Android自动化测试------monkeyrunner(六)

monkeyrunner 1.简介 monkeyrunner即android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器. monkeyrunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器.通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上. monkeyrunner工具的主要目的是用于测

【转】Android自动化测试(UiAutomator)简要介绍

一.一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?    简单的说,那些重复性的测试工作,都可以交给自动化完成:        1.设置手机的语言        2.添加.删除.收藏联系人        3.拨号.挂断        4.甚至发送短信.收藏短信 如果需要上面的功能,那么就开始自动化之旅吧. 二.Android自动化测试简单介绍 Androi

Android自动化测试(UiAutomator)

一.一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?    简单的说,那些重复性的测试工作,都可以交给自动化完成:        1.设置手机的语言         2.添加.删除.收藏联系人         3.拨号.挂断         4.甚至发送短信.收藏短信 如果需要上面的功能,那么就开始自动化之旅吧. 二.Android自动化测试简单介绍 And

解放双手——Android自动化测试

解放程序猿宝贵的右手(或者是左手) --Android自动化测试技巧 Google大神镇楼 : http://developer.android.com/tools/testing-support-library/index.html#UIAutomator 前言: 觉得文章太长不想往后翻的朋友,你们会后悔的,当然,你也可以选择先看后面的,你会觉得很爽,但是相信我,你还是会回来看前面的.那么,还是慢慢往后翻吧. 导入: 人们懒的走路,才创造了汽车: 人们懒的爬楼,才创造了电梯: 人们懒的扫地,才