昨天一天在网上搜索解决上一篇文章中的exception:

monkeyrunner内置uiautomator出错的原因

尽管没找到解决办法。可是让我无意中发现了一个好工具,比sl4a更好用的工具。直接包装uiautomator。调用uiautomator的api在本地直接编写脚本,然后执行測试case,这样比用java写。然后再打包。runcase要简单的多,关键是他还延伸非常多实用的方法,比google原生的要强大一点。

以下让它登场吧。

Name:

Python wrapper of Android uiautomator test tool

author:

贺晓聪

Github:

https://github.com/xiaocong

用法非常easy。下载2个jar包:bunder.jar,uiautomator-stub.jar

能够在github下。我一会也会分享。

下好这2个jar,将其push到android手机其中,然后启动server,我写了个批处理,直接执行cmd.bat:

adb forward tcp:9008 tcp:9008
adb push bundle.jar /data/local/tmp
adb push uiautomator-stub.jar /data/local/tmp
adb shell uiautomator runtest uiautomator-stub.jar bundle.jar -c com.github.uiautomatorstub.Stub

当server启动后会显演示样例如以下:

此时server正在执行中,好了。開始写uiautomator的case吧。既然是python,当然python的环境一定要配置好。这里我就不阐述这个了,要说的是,想要用这个工具,得依照站点上的说明安装一些module。

我安装了uiautomator.py,jsonrpclib包,urllib3包。具体你能够具体看看github上的说明,当一切准备就绪的时候,就来享受一下该工具带给你的解放吧。所以非常感谢作者的付出,由于有了这些人,才让我们感觉到技术的美好。

我还是不忘我的初衷。我就是要做用uiautomator来获得界面 控件的信息,看看该工具能不能实现。

直接上代码:

# -*- coding: utf8 -*-

from uiautomator import device as d
#点亮屏幕
#d.screen.on()
#dump界面信息
#device.dump("hierarchy.xml")
#获取界面控件信息并打印
xml = d.dump()
print xml

执行后结果:

我要的目的达到了。以下看看我之前苦苦无法解决的问题就是动态界面的问题。我们调到秒表界面。执行该脚本:

我能对作者表达一下爱慕么。尽管我也是男人。哈哈!Done it!

速度还比用uiautomator工具要快。

那么我要的东西都已经得到,来看看还有什么强大的功能。

d(text="WLAN").right(className="android.widget.Switch").click()

在设置里。我们想要点击WLAN右边的开关键,用上面的一行代码就能够搞定。这种方法非常实用。搞过uiautomator的人应该知道,在一些没有resource-id来唯一辨识该switch的地方,我之前是通过index来获得。由于当前界面有2个开关。用上面的方法就非常精确,就是运行的时候有点慢。由于它要先找到WLAN这个控件。然后向右比对控件,可能是这个原因造成的效率慢。

d(scrollable=True).gesture((100, 100), (100, 400)).to((200, 500), (300, 200))

相冊里查看相片时缩小图片的方法。

我就介绍这几个方法,其它的大家去作者站点细致阅读吧。记得要抱有感恩之心,对作者的奉献表示感谢。可是在jsonrpc的工具执行过程中,想用uiautomatorviewer查看控件信息,是不行的,直接会报错!

利用jsonrpc技术包装uiautomator的更多相关文章

  1. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  2. VC中利用多线程技术实现线程之间的通信

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...

  3. 利用neon技术对矩阵旋转进行加速(2)

    上次介绍的是顺时针旋转90度,最近用到了180度和270度,在这里记录一下. 1.利用neon技术将矩阵顺时针旋转180度: 顺时针旋转180度比顺时针旋转90度容易很多,如下图 A1 A2 A3 A ...

  4. 利用neon技术对矩阵旋转进行加速

    一般的矩阵旋转操作都是对矩阵中的元素逐个操作,假设矩阵大小为m*n,那么时间复杂度就是o(mn).如果使用了arm公司提供的neon加速技术,则可以并行的读取多个元素,对多个元素进行操作,虽然时间复杂 ...

  5. 利用jsp技术实现用户注册

    利用jsp技术实现用户注册,包含register.html和register_check.jsp页面代码​1. [代码]J2EE实验    <!DOCTYPE html PUBLIC " ...

  6. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  7. 利用WCF技术降低系统之间的耦合度

    为了降低本系统各个组件之间的耦合度,本系统将BLL层采用WCF技术发布为Web Service,以供UI层调用. 前面我们已经介绍过,为什么UI层不直接调用BLL层,而是要经过UI->Servi ...

  8. (转)iOS Wow体验 - 第五章 - 利用iOS技术特性打造最佳体验

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第五章译文精选,其余章节将陆续放出.上一篇:Wow ...

  9. 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?

    随着消费及用户体验的需求升级.人货场的运营效率需求提升.人工智能技术的突破以及零售基础设施的变革等因素共同推动了第四次零售革命的到来,不仅在国内,国外一线巨头互联网亚马逊等企业都在研发无人驾驶.无人超 ...

随机推荐

  1. python学习准备阶段(环境配置)python解释器的选择

    pycharm提示No Python interpreter configgured for the project ####### 1 点击configure python interpreter ...

  2. 运用Unity实现AOP拦截器[结合异常记录实例]

      本篇文章将通过Unity实现Aop异常记录功能:有关Unity依赖注入可以看前两篇文章: 1:运用Unity实现依赖注入[结合简单三层实例] 2:运用Unity实现依赖注入[有参构造注入] 另早期 ...

  3. JAVA 解密pkcs7(smime.p7m)加密内容 ,公钥:.crt 私钥:.pem 使用Bouncy Castle生成数字签名、数字信封

    第三方使用公钥.crt加密后返回的内容,需要使用私钥解密.pem 返回内容格式如下 MIME-Version: 1.0 Content-Disposition: attachment; filenam ...

  4. 一款实现浏览实事的资讯平台app

    一款实现浏览实事的资讯平台app 如有转载,请注明出处:http://blog.csdn.net/u012301841/article/details/46687447 github链接:https: ...

  5. Hibernate 一对一关联查询

    版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5602418.html  一对一关联,可以分为两种.一种是基于外键的关 ...

  6. SSI整合 示例

    sql语句 create table user_c (id varchar(10) primary key,name varchar(20),age int ,address varchar(30); ...

  7. AFN访问https设置

    AFN访问https的时候需要设定如下两个属性: manager.securityPolicy.allowInvalidCertificates = YES; manager.securityPoli ...

  8. ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数

    Thread threadWithParam = new Thread(new ParameterizedThreadStart(new ThreadTest().ShowMsg));//thread ...

  9. Mysql主从(主从不同步解决办法,常见问题及解决办法,在线对mysql做主从复制)

    一.主从不同步解决办法 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; 也正常. mys ...

  10. First Objective C

    // // main.m // hello-objc // // Created by test5d on 14-9-29. // Copyright (c) 2014年 test5d. All ri ...