很多人看到这个题目我相信他们可能会说,uiautomator不是java开发的吗?python怎么用呢,其实呢 ,一开始我也是这么想的,看了金阳光老师的视频,也是用java写的,我表示不服,我要科学上网去查查看,结果还真有,感谢国内 贺晓聪大神进行的封装。github地址:https://github.com/xiaocong/uiautomator ,而且给出来了详细的教程,毫不犹豫的给大神点个赞。

  安装起来很简单

pip install uiautomator

我们来看下官方给的第一个小demo

from uiautomator import device as d
d.screen.on()
d(text="Clock").click()

小试一下,用的感觉还不错呢。

需要安装安装sdk 和ANDROID_HOME,并且安卓设备可以通过adb链接,

如果就一个设备导入下面的

from uiautomator import device as d
如果多个设备需要用
from uiautomator import Device

d = Device('014E05DE0F02000E')
from uiautomator import Device

d = Device('014E05DE0F02000E', adb_server_host='192.168.1.68', adb_server_port=5037)

下面我们来看下支持的定位方式

text, textContains, textMatches, textStartsWith
className, classNameMatches
description, descriptionContains, descriptionMatches, descriptionStartsWith
checkable, checked, clickable, longClickable
scrollable, enabled,focusable, focused, selected
packageName, packageNameMatches
resourceId, resourceIdMatches
index, instance
几乎所有的定位方式都支持,比appium支持的定位方式多不少,个人感觉。
有兴趣的可以去看下官方给的api。
下面呢我利用我们公司的app做了一个demo,使用ddt数据驱动,定位方式呢,就使用id。
from uiautomator import  device as d
import unittest,os,ddt,time
from uiautomotpr import HTMLTestRunner
data=[{'username':15964636199,'password':''},{'username':15964636199,'password':'liwanlei'},{'username':15964636199,'password':'liwanlei123'}]
def assert_i(cm):
if cm.exists:
return True
else:
return False
@ddt.ddt
class TestaixuetangCase(unittest.TestCase):
def setUp(self):
cmd = 'adb shell am start com.aixuetang.teacher/.activities.LoginActivity '
os.system(cmd)
def tearDown(self):
cmd='adb shell am force-stop com.aixuetang.teacher'
os.system(cmd)
@ddt.data(*data)
def testlogin(self,data):
d(resourceId='com.aixuetang.teacher:id/et_username').set_text(data['username'])
d(resourceId='com.aixuetang.teacher:id/et_password').set_text(data['password'])
d(resourceId='com.aixuetang.teacher:id/tv_login').click()
assert_m=assert_i(cm=d(resourceId='com.aixuetang.teacher:id/tv_login'))
self.assertTrue(assert_m)
if __name__=='__main__':
suite = unittest.TestSuite()
now = time.strftime('%Y-%m%d', time.localtime(time.time()))
report_dir = r'%s.html' % now
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestaixuetangCase))
re_open = open(report_dir, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=re_open, title='爱学堂demo by uiautomator', description='测试结果')
runner.run(suite)

我们来看下运行结果

三个测试用例28秒搞定,速度还算快,更多的应用还在探索中,

 这里作者只是用了一个小demo, 其实网上还有很多的例子,https://my.oschina.net/yangyanxing/blog/498403 这个例子就不错。
以后继续探索吧, 欢迎大家可以来和我一起学习,
qq群:194704520 ,欢迎大家可以前来一起来探索美妙的IT人生,探索iT技术的奥妙,扯淡荒废的光阴。 赠言: 你在休息的时候,别人在进步,你在打闹的时候别人在进步。 不要羡慕别人的成功,因为别人的成功付出了自己汗水

 

 

uiautomator +python 实现安卓自动化的更多相关文章

  1. uiautomator +python 安卓UI自动化尝试

    使用方法基本说明:https://www.cnblogs.com/mliangchen/p/5114149.html,https://blog.csdn.net/Eugene_3972/article ...

  2. 安卓自动化测试之MonkeyRunner环境的搭建

    最近在抽时间学习一些安卓自动化的知识,把学到东西都就记录下来,避免以后记性不好忘记,也方便对自己积累知识的查阅 MonkeyRunner是基于坐标点来操作控件的,你可以通过写python脚本来调用mo ...

  3. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  4. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  5. [转载]Python实现浏览器自动化操作

    原文地址:Python实现浏览器自动化操作作者:rayment   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...

  6. appium安卓自动化的 常用driver方法封装

    appium安卓自动化的 常用driver方法封装 做安卓自动化的时候,很多方法写起来会造成代码冗余,把这部分封装起来 ,添加到androidUI工具类里,随时可调用 都放在这个类下面: @Compo ...

  7. appium安卓自动化常见问题处理

    appium安卓自动化常见问题处理 1.seesionnotcreatedexception 遇到这个首先确定下jdk需要1.7以上 然后还要确定appium是启动状态,可以cmd重启下appium ...

  8. Python 开发安卓Android及IOS应用库Kivy安装尝试

    Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...

  9. 从零学习基于Python的RobotFramework自动化

    从零学习基于Python的RobotFramework自动化 一.        Python基础 1)      版本差异 版本 编码 语法 其他 2.X ASCII try: raise Type ...

随机推荐

  1. [leetcode-628-Maximum Product of Three Numbers]

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  2. 【Android Developers Training】 48. 轻松拍摄照片

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. html标签及用法小结

    html标签小结 这几天学习了html,才发现各种标签真是多的不行,所以打算把一些个常用的标签拿出来稍微说一下. *** 常用基础标签 大体上分了三类: 带有语义的标签 带有一定样式的标签(此类标签页 ...

  4. java实现https请求

    package com.lichmama.test; import java.io.IOException; import java.net.URL; import java.security.Key ...

  5. Apache+Tomcat实现动静分离

    完成Tomcat集群搭建后,我们只需修改两.三处即可实现动静分离. 1.将原来httpd.conf中JkMount的路由规则都放入conf/extra/httpd-urimap.conf中: /*=l ...

  6. Java 异常处理笔记

    Java程序运行过程中所发生的异常事件可分为两类: §错误(Error):JVM系统内部错误.资源耗尽等严重情况 §违例(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,例如: ...

  7. 100+个MySQL调试和优化技巧

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...

  8. Java开发中碰到的Map的坑

    这属于我在开发中碰过的坑 ,容器中存放者对象,当clear()的时候,出现的奇葩问题.好了,直接看代码: package com.DataType.yinyong; import java.util. ...

  9. vue路由跳转时判断用户是否登录功能

    通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以 ...

  10. Git操作大全[实际用到的都放在这里总结]

    1.如何合并远程两个分支feature-rebuild和develop? g fetch g checkout -b develop origin/develop g merge feature-re ...