zoukankan      html  css  js  c++  java
  • monkeyrunner之坐标或控件ID获取方法(六)

        Monkeyrunner的环境已经搭建完成,现在对Monkeyrunner做一个简介。

    Monkeyrunner工具提供了一套API让用户/测试人员来调用,调用这些api可以控制一个Android设备或模拟器,而不需要了解对应的源码。

    有了Monkeyrunner,我们可以编写python脚本来控制apk包的安装和卸载、启动app、向app发送各种动作事件、截取图片并保存。

        除此之外,MonkeyRunner是Google提供的一个基于坐标点的Android黑盒自动化测试工具。所以,要使用Monkeyrunner进行自动化测试,首先,要了解Monkeyrunner中获取坐标点的方式。

    方式

    工具

    说明

    控件坐标

    MonkeyRecorder坐标获取、其他工具获取

    脚本中需要对不同分辨率兼容,坐标要动态转换

    控件ID

    HierarchyViewer解析控件ID

    对环境有要求,需要开发机、模拟器,市面商用机需要破解才能使用,一般有风险,速度慢;对不同分辨率通用

    控件ID

    MonkeyDevice

    只能进行简单的常用动作

        本文中,我们主要介绍两种获取坐标点的方式。一种是通过MonkeyRecorder获取坐标;另一种是通过HierarchyViewer工具获取控件ID。

    一、控件坐标获取

    1.Pointer location获取坐标

        先说一个比较简单的获取坐标的方式,是通过模拟器中的设置-开发者选项,找到“指针位置”的选项,勾选上。如下图所示。

        勾选后,模拟器的最顶部则显示坐标,比如点击模拟器上的任一应用,最顶部显示X、Y的值即该应用的坐标;同理,如果想要获取任一应用中的任一位置的坐标,也可用此方法。

    2. MonkeyRecorder获取坐标

        下面就MonkeyRecorder获取坐标的方式,进行演示。MonkeyRecorder是一个比较好用的获取坐标的工具,它是用来获取真机或模拟器上坐标的工具,当我们点击真机或模拟器上的空间时,就能显示真机或模拟器上的点击点的坐标。

    (1)MonkeyRecorder的启动

        首先安卓手机连接上电脑,并保证以下两个条件成立:

    a.终端USB调成开发者模式

    b.电脑安装手机驱动

        手机连接成功后,打开cmd窗口,输入adb devices查看已连接真机或模拟器设备的名称,我们这里仍以模拟器为代表。

    之后,在cmd窗口,输入monkeyrunner后,启动Monkeyrunner。做以下操作:导入MonkeyRecorder包、连接模拟器设备、以MonkeyRecorder方式启动模拟器,并依次输入

    如下命令:

    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
    
    from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
    
    device=MonkeyRunner.waitForConnection()
    
    recorder.start(device)

    到此,MonkeyRecorder正式启动。截图如下。

    (2)MonkeyRecorder的使用

        我们这里只是使用MonkeyRecorder来记录坐标,获取坐标的方式很简单。比如qq的登录界面,点击“登录”按钮,右侧就会显示该按钮的坐标;同样,点击账号输入框或密码输入框,右侧同样会显示坐标。这个坐标就是我们需要获得的坐标。

        同时,MonkeyRecorder中的界面是同模拟器页面保持一致的,在MonkeyRecorder中触发任一操作,模拟器上会有相应的触发。如果两者没有保持一致,则点击MonkeyRecorder右上角的Refresh Display即可刷新页面。

    3.控件坐标之Monkeyrunner脚本演示

        我们将下面一段Monkeyrunner脚本写到一个test.py文件中,然后运行test.py文件,查看模拟器或真机上是不是做相应的操作。

    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 
    
    device=MonkeyRunner.waitForConnection() 
    
    #启动activity(这里启动qq)
    
    device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity")
    
    #登录界面,点击账号输入框
    
    device.touch(60,300,'DOWN_AND_UP') 
    
    #输入qq账号
    
    device.type('3469191693')

    二、控件ID获取

        通过控件ID实现自动化脚本的运行,就性能而言,会比控件坐标的实现差一些;但是对于不同分辨率的设备都通用,不需要动态变换坐标。控件ID的获取主要是通过HierarchyViewer。下面就HierarchyViewer从打开方式和使用两方面进行讲解。

    1.HierarchyViewer的打开方式

        HierarchyViewer的打开方式有两种:一种是eclipse中打开HierarchyView视图,另外一种是命令行中执行sdk/tools/hierarchyviewer.bat。

        HierarchyViewer默认只能在非加密设备使用,例如工程机,工程平板或者模拟器。如果要在手机上使用HierarchyViewer,你需要在你的应用中添加一个开源库View Server。链接地址:https://github.com/romainguy/ViewServer。该篇文章中有讲解如何启动真机View Server,大家如果有兴趣,可参考:https://dup2.org/node/1538。

    方式一:连接您的真机设备,或打开模拟器,在eclipse中, 依次选择Window-Open Perspective-Other,在Other中,选择HierarchyView视图,即可打开。

    方式二:连接您的真机设备或打开模拟器,运行cmd窗口,进入到sdk/tools目录下,输入命令hierarchyviewer.bat,运行hierarchyviewer。

        或者直接在sdk/tools目录下,找到hierarchyviewer.bat,双击运行。

    下面讲解利用HierarchyViewer获取控件ID的方法。

    2.HierarchyViewer获取控件ID

        HierarchyViewer启动后,首先会看到的第一个窗口显示了设备和模拟器的列表。点击左边的箭头,就会展开当前设备或模拟器的Activity对象列表。列表中显示了设备或模拟器上,UI当前可视的所有Activity对象。这些对象按照它们的Android组件名称列出来。列表中的内容包含应用的Activity对象和系统的Activity对象。

        当模拟器activity画面变更后,点击refresh可以加载新的页面布局信息。

        从列表中选择你的activity名称,双击,或点击菜单栏的Load View Hierarchy按钮,进入View Hierarchy窗口,查看它的view层次结构;或者点击Inspect Screenshot按钮,进入Pixel Perfect窗口,从而查看UI的一个放大图像。我们这里点击进入View Hierarchy窗口。

        可以从下图中看到模拟器此activity的画面布局信息,左边部分是hierarchy通过树形结构展示的布局形式,右下角是模拟器上当前页面的UI布局信息。

        通过滚动鼠标,可以放大每个树节点;拖拽鼠标,移动树形结构布局。双击树节点可以展示单独的UI部分。从下图中,可以看到,id/btn_login即为登录按钮的ID。依次类推,可以查看其它控件ID。

    注:对于列表、或者弹出框则无法直接通过点击ID操作成功,需要计算ID的坐标。

    3.控件ID之Monkeyrunner脚本演示

        同样的,我们将下面一段Monkeyrunner脚本写到一个test.py文件中,然后运行test.py文件,查看模拟器上是不是做相应的操作。

    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 
    
    from com.android.monkeyrunner.easy import EasyMonkeyDevice   #提供了根据ID进行访问
    
    from com.android.monkeyrunner.easy import By    #根据ID返回PyObject的方法
    
    device=MonkeyRunner.waitForConnection() 
    
    #启动activity(这里启动qq)
    
    device.startActivity(component="com.tencent.mobileqq/.activity.SplashActivity")
    
    easy_device=EasyMonkeyDevice(device)    #必须在activity启动之后
    
    #登录界面,点击账号输入框
    
    easy_device.touch(By.id('id/0x20e'),MonkeyDevice.DOWN_AND_UP)
    
    device.type('3469191693')                    #输入qq账号
    test.py

        到这里,获取控件坐标和控件ID的两种方式已经介绍完,由于没有深入研究,肯定有不少功能点没有介绍到,有时间的话再做完善。

  • 相关阅读:
    Centos7 下安装docker
    在docker容器下安装airflow
    Windows 下部署 hadoop spark环境
    AirFlow功能展示个人笔记
    23.安装php和echarts进行结合展示图表
    22.把hive表中数据导入到mysql中
    21.根据hive绑定数据统计计算保存到hive表中
    20.采集项目流程篇之清洗数据绑定到hive表中
    【线程系列二】线程的五种状态
    数组、链表、和哈希表的区别
  • 原文地址:https://www.cnblogs.com/lynn-li/p/5894953.html
Copyright © 2011-2022 走看看