uiautomator +python 实现安卓自动化
很多人看到这个题目我相信他们可能会说,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 实现安卓自动化的更多相关文章
- uiautomator +python 安卓UI自动化尝试
使用方法基本说明:https://www.cnblogs.com/mliangchen/p/5114149.html,https://blog.csdn.net/Eugene_3972/article ...
- 安卓自动化测试之MonkeyRunner环境的搭建
最近在抽时间学习一些安卓自动化的知识,把学到东西都就记录下来,避免以后记性不好忘记,也方便对自己积累知识的查阅 MonkeyRunner是基于坐标点来操作控件的,你可以通过写python脚本来调用mo ...
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- Python实现浏览器自动化操作
Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼ 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...
- [转载]Python实现浏览器自动化操作
原文地址:Python实现浏览器自动化操作作者:rayment 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...
- appium安卓自动化的 常用driver方法封装
appium安卓自动化的 常用driver方法封装 做安卓自动化的时候,很多方法写起来会造成代码冗余,把这部分封装起来 ,添加到androidUI工具类里,随时可调用 都放在这个类下面: @Compo ...
- appium安卓自动化常见问题处理
appium安卓自动化常见问题处理 1.seesionnotcreatedexception 遇到这个首先确定下jdk需要1.7以上 然后还要确定appium是启动状态,可以cmd重启下appium ...
- Python 开发安卓Android及IOS应用库Kivy安装尝试
Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...
- 从零学习基于Python的RobotFramework自动化
从零学习基于Python的RobotFramework自动化 一. Python基础 1) 版本差异 版本 编码 语法 其他 2.X ASCII try: raise Type ...
随机推荐
- Swift计算字符数量
通过调用全局 countElements 函数并将字符串作为参数进行传递可以获取该字符串的字符数量. let unusualMenagerie = "Koala
- Streaming结合Kafka
Spark2.11 两种流操作 + Kafka Spark2.x 自从引入了 Structured Streaming 后,未来数据操作将逐步转化到 DataFrame/DataSet,以下将介绍 S ...
- 2.Smarty的引入和实例化
1.把demo和lib复制出来,并且创建一个test文件夹作为工作的目录 如图所示: 2.这是libs里面的内容,其中smarty.class.php包含了smarty各种方法和功能,需要实例化它还工 ...
- (cljs/run-at (JSVM. :browser) "简单类型可不简单啊~")
前言 每逢学习一个新的语言时总要先了解这门语言支持的数据类型,因为数据类型决定这门语言所针对的问题域,像Bash那样内置只支持字符串的脚步明显就是用于文本处理啦.而数据类型又分为标量类型(Scala ...
- 一款好用的绘图软件gnuplot
漂亮的图片在一篇报告中是必不可少的.这里推荐一款绘图软件Gnuplot. Gnuplot是一种免费分发的绘图工具,可以移植到各种主流平台,无论是在Linux还是在Windows都易于安装使用.最新的版 ...
- CentOS6.4虚拟机设置固定IP、安装JDK、Tomcat、Redis并部署web项目
一.CentOS设置固定IP 1.直接修改配置文件的方式,原文地址:http://www.cnblogs.com/zhja/p/3964159.html (1)首先获取你的GATEWAY 方便后面在c ...
- jsonp的原理和实现
什么是JSONP? javascript高级程序设计中是这样介绍jsonp的: jsonp是JSON with padding(填充式JSON或参数式JSON )的简写,是应用JSON的一种新方法,在 ...
- Oracle强制启动和关闭实例
要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆.一般我们常用SYS用户以SYSDBA连接来启动和关闭数据库.下面介绍Oracle数据库几 ...
- Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理
Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理 1. 回顾 我们知道Android输入系统是Reader线程通过驱动程序得到上报的输入事件,还要经过处理 ...
- 使用TinyXML进行XML操作
本例基于TinyXML实现XML的自动解析和创建,由于本人是菜鸟刚入门,例子中添加了enum.struct.vector.map.list的常见用法,首先添加6个tinyxml工程文件,然后设置调试参 ...