昨天一天在网上搜索解决上一篇文章中的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. vue - check-versions.js for semver

    引入的是一个语义化版本文件的npm包,其实它就是用来控制版本的,详情见:https://www.npmjs.com/package/semver 用谷歌翻译npm文档 semver.valid('1. ...

  2. 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)

    目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法   1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...

  3. 网站缓存技术(Redis、Memcached、Ehcache)

    Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等等. 分类的标准也不一,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点 ...

  4. Python 使用 UTF-8 编码(转)

    Python 使用 UTF-8 编码(转) 原文出处:http://blog.chenlb.com/2010/01/python-use-utf-8.html 一般我喜欢用 utf-8 编码,在 py ...

  5. python selenium --调用js

    转自:http://www.cnblogs.com/fnng/p/3230768.html 本节重点: 调用js方法 execute_script(script, *args) 在当前窗口/框架 同步 ...

  6. poj_2773

    题目的愿意非常easy.给你一个n,求在升序排列的情况下,第k个与之相互素的数. 解法:首先我们要知道gcd(b×t+a,b)=gcd(a.b),那么接下来就非常easy了.全部与之互素的数都是以ph ...

  7. AngularJS ——ngResource、RESTful APIs 使用

    这篇文章里,用以下两个情景用例来解释: 保存/持久化 新的数据对象 更新存在的数据对象 代码片段包含了AngularJs代码和Spring MVC代码,以能够让你简单快速的上手. 想要$resourc ...

  8. phpcms v9实现调用多个栏目id的方法

    {pc:content action="position" posid="14" catid="13,14,15,16,17,18,19,20,21& ...

  9. zepto,kissy前端框架实现跨域

    三.jsonp的原理:带有src属性标签的跨域资源获取能力,在jsonp中通常使用<script>标签,因为<script>标签获取的跨域资源可以使用回调函数直接处理 json ...

  10. Python内置函数之int()

    class int(x, base=10) 返回一个整型对象.默认返回0. 参数x可以是字符串,也可以是浮点数. base指x的进制形式,比如2表示2进制,10表示10进制.特别需要注意的是,0表示任 ...