`
angelguo
  • 浏览: 118270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pyuiantomator实现安卓自动化测试

 
阅读更多

该工具以Python package的形式存在,可通过pip在测试机(PC)上进行安装。

1
pip install uiautomator

安装完毕后,无需在Android设备上安装任何东西,只要设备通过adb与主机相连,就可以在主机中通过Python操作Android设备的UI控件。

如下是简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from uiautomator import device as d
 
# Turn on screen
d.screen.on()
 
# press back key
d.press.back()
 
# click (x, y) on screen
d.click(x, y)
 
# check unchecked checkbox
checkbox = d(className='android.widget.CheckBox', checked='false')
checkbox.click()
 
# click button with text 'Next'
d(text="Clock").click()
button = d(className='android.widget.Button', text='Next')
button.click()
 
# swipe from (sx, sy) to (ex, ey)
d.swipe(sx, sy, ex, ey)

更详细的使用方法可参考项目文档

通过这种方式,我们就可以极大地简化Python操作UI控件的方式,不用再对照着UI Automator API使用Java编写测试用例,也不用再反复编译jar文件,省去了同一个测试场景需要维护两套代码的麻烦,整个过程也更加Pythonic。

当然,pyuiautomator也并非完美,毕竟它不是Google官方维护的,从我实际使用的经历来看,有时候也会存在一些问题。这里先不展开,后续会单独写一篇博客。不过,总的来说,pyuiautomator还是非常值得使用的,它的确可以大大简化测试工作量。

现在继续本文的主题,我们怎么采用pyuiautomator来进行UI控件操作呢?

其实从上面的示例代码中就可以看到,UI控件的操作分为两步,首先是对目标控件进行定位,然后是对定位的控件执行动作。

定位控件

在UI中,每个控件都有许多属性,例如classtextindex等等。我们要想对某一个控件进行操作,必然需要先对目标控件进行选择。

在上面的pyuiautomator用法示例中,已经包含了控件选择的代码:

1
2
checkbox = d(className='android.widget.CheckBox', checked='false')
button = d(className='android.widget.Button', text='Next')

在这两行代码中,分别实现了对checkbox和button的选择。基本原则就是,通过指定的控件属性,可以唯一确定目标控件。

那么,我们怎么知道目标控件有哪些属性,以及对应的属性值是什么呢?

Google官方提供了两个工具,hierarchyvieweruiautomatorviewer,这两个工具都位于<android-sdk>/tools/目录下。关于这两个工具的区别及其各自的特点,本文不进行详细介绍,我们当前只需要知道,在查看控件属性方面,这两个工具实现的功能完全相同,界面也完全相同,我们任选其一即可。

{: .center}
uiautomatorviewer

通过这个工具,我们可以查看到当前设备屏幕中的UI元素信息:

  • 当前Android设备屏幕中显示的UI元素的详细属性信息
  • 当前Android设备屏幕中所有UI元素的层级关系结构

需要强调的是,工具每执行一次dump,获取到的UI信息仅限于当前屏幕中前端(foreground)显示的内容。

获得UI元素的信息后,由于UI控件是以树形结构进行存储,而且每个控件都存在index属性值,因此,理论上讲,通过层级结构和index属性就能唯一指定任意UI控件。

然而,这并不是最佳实践。因为通常情况下,UI布局的树形结构层级较多,通过层级关系进行指定时会造成书写极为复杂,而且从代码中很难一眼看出指定的是哪个控件。不信?看下这个例子就能体会了。如下代码对应的就是上图中红色方框的控件,可以看出,要是寻找每个控件都要从顶级节点开始,要将根节点到目标控件的路径找出来,这也是一个很大的工作量,而且很容易出错。

1
2
3
4
5
6
7
8
9
10
11
12
13
d(className='android.widget.FrameLayout')
.child(className='android.widget.LinearLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.view.View')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.FrameLayout')
.child(className='android.view.View')
.child(className='android.widget.FrameLayout')
.child(className='android.widget.TextView')

在实际应用中,我们更多地是采用控件的属性信息来定位控件,一般情况下,采用属性值text就能唯一确定目标控件了。例如同样是对上图中的红色方框进行定位,如下代码就足够了。

1
d(text='UC头条有新消息,点击刷新')

不过,经常会出现目标控件的text属性值为空的情况,这个时候我们一般就会采用class属性和部分层级关系组合的方式。同样是上图中的红色方框,我们也可以使用如下方式进行定位。

1
d(className='android.widget.FrameLayout').child(className='android.widget.TextView')

可以看出,同一个控件,我们可以采用多种方式进行定位。具体选择何种定位方式,可以参考如下准则:

  • 定位方式应保证定位准确
  • 定位方式应尽可能简洁
  • 定位方式应尽可能稳定,即使屏幕界面出现变化,定位方式也不会失效

这里说到了定位方式的准确性,那要如何进行验证呢?技巧是,采用.count.info属性值即可。

1
2
3
4
>>> d(text='UC头条有新消息,点击刷新').count
1
>>> d(text='UC头条有新消息,点击刷新').info
{u'contentDescription': None, u'checked': False, u'clickable': True, u'scrollable': False, u'text': u'UC\u5934\u6761\u6709\u65b0\u6d88\u606f\uff0c\u70b9\u51fb\u5237\u65b0', u'packageName': u'com.UCMobile.projectscn1098RHEAD', u'selected': False, u'enabled': True, u'bounds': {u'top': 1064, u'left': 42, u'right': 1038, u'bottom': 1136}, u'className': u'android.widget.TextView', u'focusable': False, u'focused': False, u'checkable': False, u'resourceName': None, u'longClickable': False, u'visibleBounds': {u'top': 1064, u'left': 42, u'right': 1038, u'bottom': 1136}, u'childCount': 0}

.count属性值为1,.info属性值的内容与目标控件的属性值一致时,就可以确定我们采用的定位方式是准确的。

控件操作

定位到具体的控件后,操作就比较容易了。

pyuiautomator中,对UI Automator的UI操作动作进行了封装,常用的操作动作有:

  • .click()
  • .long_click()
  • .swipe
  • .drag

更多的操作可根据我们测试场景的实际需求,查询pyuiautomator文档找到合适的方法。

 

 

参考文档

分享到:
评论

相关推荐

    FastReport 模版打印如何实现

    FastReport 模版打印如何实现

    使用运算放大器模拟反相放大器的闭环电压增益simulink.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于java的抗疫医疗用品销售平台设计与实现.docx

    基于java的抗疫医疗用品销售平台设计与实现.docx

    vue+SpringBoot749乡村日常政务管理系统的设计与实现java毕业设计源码含论文.rar

    jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:springboot 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+springboot+vue+MYSQL+MAVEN 前端采用的Vue框架,后端采用java语言,sprinboot框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统

    java毕业设计源码ssm859基于SSM框架的线上DIY手工艺品综合平台+vue程序数据库含论文.rar

    前端采用的Vue框架,后端采用java语言,ssm框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统 本系统基于SSM(Spring+SpringMVC+MyBatis)框架,适用于毕业设计, 基于B/S模式, mysql数据库,感兴趣的朋友们可以下载研究一下。 jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:ssm 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+ssm+vue+MYSQL+MAVEN

    java基于ssm+vue企业在线培训系统源码 带毕业论文

    【资源说明】 1、开发环境:ssm框架;内含Mysql数据库;VUE技术 2、项目代码都经过严格调试,代码没有任何bug!下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。

    任务管理系统Web(Spring+Mybaties).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    这是一个基于mediapipe实现的运动计数项目;大三上期末小组作业;python。.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    (全国物联网大赛一等奖,挑战杯铜奖)基于QT的人脸识别,定位导航,脑电心率测算,用GPRS传到服务端的疲劳驾驶检测系统(毕设&课

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    南开大学2023年前端开发实训大作业.zip(课设&实训&大作业&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    毕业设计 C-V2X漏洞挖掘 开放资源.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于 Java+SqlServer 实现的学生学籍管理系统毕业设计(源代码+论文+开题报告+外文翻译+答辩PPT)

    【作品名称】:基于 Java+SqlServer 实现的学生学籍管理系统【毕业设计】(源代码+论文+开题报告+外文翻译+答辩PPT) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:本系统是用JSP开发工具实现的,主要完成对学籍的管理,包括添加、修改、删除,查询,以及用户管理等五个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能。系统的核心是添加、修改和删除三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成添加或删除操作时系统会自动地完成学籍的修改。查询功能也是系统的核心之一,在系统中主要根据学生学号和课程号进行查询,其目的都是为了方便用户使用。系统也有完整的用户添加、删除和密码修改功能。 本系统功能主要划分学生操作管理、管理员操作管理这2大模块。其中学生操作模块包括学籍维护、选课管理、成绩查询、修改密码这几个小模块。管理员操作包括后台学生信息管理、选修课程信息管理、基础课程信息管理、成绩这几个小模块。 在本系统中使用的是SQL Server2000数据库

    本项目属于机器学习的简单部分,基于为了快速理解机器学习而搭建的人工智能速成项目(毕设&课设&实训&大作业&竞赛&项目)

    本项目属于机器学习的简单部分,基于为了快速理解机器学习而搭建的人工智能速成项目,大家可以根据其中的项目时间进行相关的学习.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    2022年研一高级机器学习课程设计.zip(课设&实训&大作业&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    java-ssm947基于JSP的贝儿宠物店管理系统的设计与实现+jsp程序源码数据库含论文.rar

    本系统基于SSM(Spring+SpringMVC+MyBatis)框架,适用于毕业设计, 基于B/S模式, mysql数据库,感兴趣的朋友们可以下载研究一下。 后端采用java语言,ssm框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统 jdk版本:jdk1.8+ 前端:jsp 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:ssm 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+ssm+jsp+MYSQL+MAVEN

    vue+SpringBoot421露营地管理系统设计与实现java毕业设计源码含论文.rar

    jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:springboot 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+springboot+vue+MYSQL+MAVEN 前端采用的Vue框架,后端采用java语言,sprinboot框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统

    基于java的小型药店管理系统设计与实现.docx

    基于java的小型药店管理系统设计与实现.docx

    基于java的人事管理系统设计与实现.docx

    基于java的人事管理系统设计与实现.docx

    技术栈Spring MVC+ Mybatis+Spring + Jsp+ Tomcat , 是Java Web入门非常好项目

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    simulink 电力系统之变压器空投合闸,励磁涌流分析.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics