Code Monkey home page Code Monkey logo

adb-for-test's Introduction

Adb-For-Test

通过 adb 命令实现简单的点击、滑动、长按等效果,可通过比例定位元素、通过元素定位(需要 Android 版本高于 4.0),用于Android Test,拥有 monkeyrunner 的绝大部分功能

2018.05.17

python 版本获取分辨率方法添加对 4.3 及以上机型通过wm size命令获取

2015.12.24

java 版本增加 pinchZoom 方法,对屏幕进行缩放

2015.04.28

  • 重构 python 版本中的 adbUitils 模块,合并 AppInfoAction 类至 ADB

    初始化方法:

    adb = ADB() 或 adb = ADB("device_id")

  • 重构的目的是增加 python 版本对多设备的支持,通过传入 device_id,解决有多台设备连接 USB 时无法执行脚本的问题

  • Element 类中增加通过属性 content-desc 定位元素的方法

Robotium

  • 如果想用于Robotium处理跨进程,需要修改部分代码,请参考Adb-For-Robotium

为何写这么个东西?

  • 目前所做的工作是对 rom 的测试,所以基本上所有的测试环境都集中在 Android4.2、4.3、4.4平台,平台比较固定
  • Android 测试中最为熟悉的就是 adb 命令,很多功能都可通过adb命令去实现,因此几乎可以使用任何的编程语言去编写脚本调用 adb 命令,去实现对设备的操作
  • 将日常工作中封装的一些由 adb 命令完成的功能整合在一起,方便于使用
  • 作为自己学习 java、python 的一种实践

优点

  • 分别采用两种语言(java、python)实现,需要的环境都极其的简单,不需要 root
  • 基本上都以 adb 命令完成功能,可从代码中剥离部分代码形成日常用的脚本(参考AndroidTestScripts项目)
  • 由于是通过 adb 命令去发送事件,所以可跨应用进行测试,可用来扩展其他 Android 测试框架
  • 通过设备分辨率与坐标转换,可以方便的以屏幕比例作为参数来操作设备
  • 调用了 uiautomator 命令,Android4.0 以上,可通过界面元素进行定位,可获取界面内单个元素区域的坐标范围,以此截取图片(区别于截取整个屏幕)
  • 可采用截图对比全图、部分区域图片、获取当前界面某个元素、获取当前界面的 Activity 等各种属性,对测试结果进行判断

缺点

  • 部分功能需要较高的 Android 版本,低版本的未去验证,所以局限性很大,纯当练手
  • 初学 java、python,代码写得比较烂
  • 很多地方未做异常处理
  • 暂时未写单元测试,所以使用时需要读者阅读具体的源码
  • 有疑问有吐槽请联系:Email: [email protected] QQ:274925460

需要的环境

  • 环境变量:需配置 ANDROID_HOME
  • python:python2.7,如果用到截图对比功能,需要安装 PIL 库,PIL 无法安装时可用Pillow
  • java: jdk1.6 以上,不需要其他任何第三方 jar 包, jar 不可用时,可能是 jdk 版本问题,请自行编译

如何使用

  • python:使用 setup.py install 安装,未去强制判断要求安装 PIL,使用 ImageUtils 时则需要安装
  • java:导入 Adb-For-Test.jar 即可

简单例子

  • 在 TestDemo 目录下分别有 python、java 的例子,使用的 apk 是 ApiDemos.apk

  • 这里使用 python 写一个截取桌面应用图标的例子:

    #coding=utf-8
    
    import os
    
    from adbUtils.utils.adbUtils import ADB
    from adbUtils.utils.imageUtils import ImageUtils
    from adbUtils.utils.element import Element
    
    #单个设备可不传入device_id
    adb = ADB(“device_id”)
    element = Element("device_id")
    
    #获取图片区域
    icon = element.getElementBoundsByClass("android.widget.TextView")[0]
    image = ImageUtils()
    #截取图片
    image.screenShot().subImage(icon).writeToFile(os.getcwd(), "image")
    
    #加载需要对比的目标图片
    #load = image.loadImage(os.getcwd() + "\\image.png")
    #print image.screenShot().subImage(icon).sameAs(load)
    

adb-for-test's People

Contributors

bryant1410 avatar gb112211 avatar shixue33 avatar wyhuster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adb-for-test's Issues

how to implement multiple touch andswipe ?

i wanna to use adb to implement multiple touch and multiple swipe to play game , the swipe event and swipe_by_corwordinate which your repository provide how to use? looking forward your replay

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.