Uiautomator Api浅析

Uiautomator2实现Android自动化测试详解 已选中的元素,通常用于复选框,参数为True,False。获得了焦点的元素,参数为True,False。当前选中的元素,参数为True,False。description符合指定正则的元素。可检查的元素,参数为True,False。可点击的元素,参数为True,False。可长按的元素,参数为True,False。可滚动的元素,参数为True,False。已激活的元素,参数为True,False。可聚焦的元素,参数为True,False。resourceId为符合指定正则的元素。 阅读详情

最近在处理CTS问题时会遇到一些UiAutoMator相关的API,搜集资料记录。


转至http://blog.sina.com.cn/s/blog_ae2575ff01018b2o.html


从android sdk api 16开始,Android SDK开始支持两个做功能UI测试的新工具。
uiautomatorviewer,一个用以扫描以及分析Android应用程序的UI部件的工具。
以及uiautomator ,一个提供API用以自定义UI测试的Java库。
要应用上面两个工具,除了需要android sdk api 16以上的前提条件外,还要求Android SDKTools为21版以上。

UiAutomator主要涉及一下几个类,大多数位于源码包的com.android.uiautomator.core下,其中粗体字部分为主要会接触到的类,熟知这5个类的作用,就可以大体顺畅的写出UiAutomator的测试用例。

UiAutomatorTestCase
UiDevice
UiSelector
UiScrollable
UiObject
UiCollection

UiTestAutomationBridge, UiAutomatorBridge
InteractionController, QueryController
UiWatcher

UiAutomatorTestCase

TestCase (Junit) ->UiAutomatorTestCase  ->App Test

每个测试用例都需要继承UiAutomatorTestCase,以实现测试环境的setup,teardown等同能。而UiAutomatorTestCase则是通过继承Junit3中的TestCase类,并在其中的setUp()、tearDown() 、getParams() 函数中。其中主要是用Bundle实现AndroidActivity之间的通讯。在UiAutomatorTestCase,还加入了getUiDevice()等关于UiDevice的函数,以实现在测试的任意地方均可调用UiDevice()。

UiDevice

此类主要包含了获取设备状态信息,和模拟用户至于设备的操作两类api。

可以通过getDisplaySizeDp(), getDisplayWidth() , getDisplayHeight() ,getProductName(),getCurrentActivityName(), getCurrentPackageName() 等获取设备相关信息。

pressMenu(), pressBack(), pressHome(), pressSearch(),pressDPadCenter(), pressDPadRight(), pressDPadLeft(), pressDPadUp(), pressDPadDown(),pressDelete(), pressEnter(), pressKeyCode(), pressRecentApps(),click(),swipe(),getDisplayRotation() setOrientationLeft()…wakeUp(), sleep(),dumpWindowHierarchy(), waitForWindowUpdate()等API可以灵活的操纵设备。

而takeScreenshot() 允许随时对设备截屏。

UiSelector

主要是通过一定查询方式,定位到所要操作的UI元素。

一般UI元素均可通过以下API定位:text(), textMatches(String regex), textStartsWith(), textContains(),className() ,classNameMatches(String regex), className(Class type),Description(), descriptionMatches(String regex),descriptionStartsWith(),descriptionContains(),packageName(), packageNameMatches(String regex)。

值得注意的是index()和 instance()两个函数,其中index()是当前页面的ID编号,instance()则表示在一定都搜索结果下,获取的子元素集的第几个元素。如:
new UiSelector().className("android.widget.ImageView").enabled(true).instance(2);

另有enabled(), focused(), focusable(), scrollable(), selected(), checked(), clickable() ,longClickable(),childSelector()等检索条件,顾名思义。

UiObject

UiObject可代表页面的任意元素,它的各种属性定位通常通过UiSelector来完成。

比较常用的Api如clickAndWaitForNewWindow(),表示点击该元素,并且等待新新窗口的展示完毕。这一过程是AndroidUI Testing框架支持的,不需要额外的控制等待时间。

UiObject允许点击该元素的具体一个部分,Api如clickTopLeft(), longClickBottomRight(),… 

通过getText(), getContentDescription(), getVisibleBounds(),… 等api可获取UiObject的相关属性,getPackageName() 可用来明确是否打开了目标测试的App.

setText(), clearTextField() 可以用来设置以及清空所关联的输入框。

waitForExists() 可以用来操纵相关等待或验证。

UiCollection

UiCollection一般与UiSelector连用,如它的构造函数也要求提供Uiselector:UiCollection(UiSelector selector)。
它的api较少,主要用以从Uiselector筛选出的元素集中挑出所要的元素:getChildByDescription(), getChildByInstance(), getChildByText(),以及统计元素集的个数getChildCount()


UiScrollable

UiObject -> UiCollection->UiScrollable

UiScrollable 用来表示可以滑动的界面元素,其继承关系如上图所示。

其Api中,setAsVerticalList(), setAsHorizontalList()用以设置Ui元素列表是基于横向滚动还是纵向滚动。其后可以用getMaxSearchSwipes(),flingForward(), flingBackward(),scrollForward(),scrollBackward(),scrollToEnd(), scrollToBeginning()等函数控制滑动,以及getChildByDescription(), getChildByInstance(), getChildByText(),scrollIntoView(), scrollTextIntoView(),…来选择是否已经转换到具有目标元素的页面。如:
UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList();
UiObject helperApp;
helperApp = appViews.getChildByText(new UiSelector()
.className(android.widget.TextView.class.getName()), " 91助手 "); 则若当前页面没有91助手APP, 测试会自动滑动页面,直到91助手App出现。

下面介绍下UI Testing Framework构成的重要类:

UiTestAutomationBridge

这是整个TestingFramework的基础,此类负责连接系统了,记录最新的可链接事件(AccessibilityEvent) ,窗口内容查询Api等。可以被Android App调用,或者Java程序从shell调用。

这里需要注意两个概念:

1、AccessibilityEvent:所有的Ui元素可以被操纵,因为这些Event都是AccessibilityEvent。对于怎样令页面元素可以被操纵,使得相关的事件都是AccessibilityEvent,请参见Uiautomator 词条-"确认程序可以被测试" 部分。
2、AccessibilityNodeInfo:视窗中的组件树节点,也就是uiautomtorViewer中展示的各个节点。
Api中connect(), disconnect() 负责建立与设备的实际连接。
executeCommandAndWaitForAccessibilityEvent()performAccessibilityAction()findAccessibilityNodeInfosByText(), findAccessibilityNodeInfoByViewIdInActiveWindow()都是其中重要的Api。

UiAutomatorBridge

UiAutomatorBridge是UiTestAutomationBridge的子类,区别主要是在构造函数中加上了InteractionController 和QueryController 两大对象的调用。以及一些常量定义等。除了上述差异,UiAutomatorBridge还定义了executeCommandAndWaitForAccessibilityEvent()、onAccessibilityEvent() 、waitForIdle()、addAccessibilityEventListener() 等函数。

InteractionController

介绍InteractionController,需要先提InteractionProvider,它负责注入用户事件(如点击、输入等) ,并且反应事件的对应坐标。
InteractionController则定义了几乎所有至于手机的基础操作,如runAndWaitForEvents(), clickAndWaitForEvents(),click(), longTap(), scrollSwipe(),Swipe(),clickAndWaitForNewWindow(),touchUp(), touchDown(), TouchMove(),isNaturalRotation(), setRotationRight(), setRotationLeft() ,freezeRotation(),wakeDevice(), sleepDevice() 等。

QueryController

QueryController负责把UiSelector 的查找信息转化为AccessibilityNodeInfo。
具体Api如下:findNodePatternRecursive(), translatePatternSelector(),translateReqularSelector(), translateCompoundSelector(),getRootNode() ,findAccessibilityNodeInfo()。

UiWatcher

UiWatcher只在UiSelector无法找到匹配的结果时被调用,意在重试、等待页面更新 (如弹出对话框)等。其中只有一个主要函数:checkForCondition() 。

它的相关函数均在UiDevice中,如:UiDevice.registerWatcher(),UiDevice. resetWatcherTriggers(),UiDevice.runWatchers(),UiDevice.removeWatcher() 

Uiautomator2 常用API大全 Uiautomator2 常用API 纯手动输出建议收藏点赞一键三连 github参考链接: https://github.com/openatx/uiautomator2/tree/master/uiautomator2 文章目录Uiautomator2 常用API标准APi等待相关上传下载文件检索设备信息检查并维持设备端守护进程处于运行状态获取屏幕大小获取当前设备信息等待活动获取设备序列号获取网络ip获取详细设备信息键盘事件息屏亮屏获取当前屏幕状态按硬/软键解锁屏幕点击交互事件点击滑动事件拖动定位滑 阅读详情

相关推荐

UiAutomator

Android UI自动化测试-UiAutomator 需要用到的jar包。

Python+uiautomtor2实现app自动化测试

uiautomtor2+python做安卓app自动化

weixin_72037910的博客 1512

ADRV9009学习资料保存:基于XC7Z100+ADRV9009的双收双发无线电射频板卡

ADRV9009学习资料保存:基于XC7Z100+ADRV9009的双收双发无线电射频板卡 一、板卡概述 基于XC7Z100+ADRV9009的双收双发无线电射频板卡是基于XilinxZYNQFPGA和ADI的无线收发芯片ADRV9009开发的专用功能板卡,用于5G小基站,无线图传,数据收发...

9353

自动化工具之UIAutomator

1、UIAutomator原理是什么? UIAutomator是Android UI自动化测试工具 不需要源码,基于Java开发语言 提供很多类库帮助去实现自动化的测试过程: UiDevice、UiSelector、UiScrollable、UiObject、UiCollection 2、UIAutomator可以测试什么? App UI层的交互操作 不需要源码,可以模拟跨进程过程 ...

晓康的博客 2946

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

Netapp FAS2750热备盘替换失败问题分析与解决

本文深入分析了Netapp FAS2750存储系统中热备盘替换失败的故障现象,揭示了磁盘分区属主不匹配导致数据同步无法启动的根本原因。通过详细的排查步骤和解决方案,帮助运维人员快速恢复aggr状态,并提供了长期预防措施和最佳实践建议,确保存储系统的高可用性。

weixin_33737774的博客 399

UI Automator 的详细用法步骤解析

浅谈UI Automator 1.UIAtomator测试工具定义以及用途 2.四大测试工具的优缺点比较 3.测试工具的工作流程 4.测试环境的配置以及用到的工具的介绍 5.UIAutomator API 6.结合Demo具体的测试操作步骤 7.一点感悟 1.UIAtomator测试工具定义以及用途 Google 官方出的一种简单的UI自动化测试工具。在Android测试中,UI界面测试占...

android 系统定制开发那些事 3万+

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

安卓自动化测试uiautoamtor

uiautoamtor 是一个自动化测试框架,旨在帮助开发人员和测试人员自动执行 UI 测试。它可以模拟用户在应用程序中的操作,并捕获应用程序的响应,以便进行验证和测试。要使用 uiautoamtor,需要先安装它并设置必要的配置。然后,您可以编写测试脚本来模拟用户操作并验证应用程序的行为。在 uiautoamtor 中,可以使用不同的编程语言来编写测试脚本,例如 Python、Java、Ruby 等。如果你想搭建测试框架,可以考虑使用 uiautoamtor2。

Documentlv的博客 592

光斑大小控制【ZEMAX操作数】

在使用Zemax优化光学系统时,对成像的聚焦光斑大小进行限制,即弥散斑的大小; 一、RSCE(质心RMS光斑半径):二、RSCH(光线RMS光斑半径):

yh的博客 7861

工作之余的随想:AI 会终结 SAP 顾问吗?

本文是笔者工作之余的一些胡思乱想。昨晚(准确的说是今日凌晨),我又熬了一个夜。没办法,接到一个影响客户项目上线的紧急 incident,花了我好长时间,竟然一点头绪都没有。苦苦思索的过程,时间过得飞快。一转眼就晚上11:30 了。要说我 2007 年还在研三实习期间,就进入了 SAP 行业,到今天已经摸爬滚打 18 年了,按理说也算身经百战了,可以说处理过很多 SAP 客户使用系统时遇到的各种稀奇古怪的问题。但即便这样,我也时常在工作中遇到一开始感到无从下手的问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1262

关于UIautomator API及浅析

从android sdk api 16开始,Android SDK开始支持两个做功能UI测试的新工具。 uiautomatorviewer,一个用以扫描以及分析Android应用程序的UI部件的工具。 以及uiautomator ,一个提供API用以自定义UI测试的Java库。 要应用上面两个工具,除了需要android sdk api 16以上的前提条件外,还要求Android SDK T

Mind_Reader的博客 4344

05 SAP CPI 访问第一个CPI接口

其中的clientid的值可作为Basic验证的用户名,clientsecret的值可作为Basic验证的密码。点击SEND按钮,可看见返回状态为200 OK。在04中,我们得到TOKEN令牌。POSTMAN向下滚动。点击按钮获取token。

SAP CPI 661

【转】Uiautomator Api浅析

原文地址:http://blog.sina.com.cn/s/blog_ae2575ff01018b2o.html uiautomator api:http://android.toolib.net/tools/help/uiautomator/index.html 从android sdk api 16开始,Android SDK开始支持两个做功能UI测试的新工具。uiaut...

weixin_30371875的博客 75

AD-Copilot 论文解读:把“大模型看图”升级为“对照检验”的工业异常检测助手

本文提出AD-Copilot,一个面向工业异常检测的视觉语言助手,通过视觉上下文比较解决现有方法的不足。针对工业场景中多模态大模型表现不佳的问题,作者指出核心原因在于缺乏工业数据和比较能力不足。为此,论文提出三个关键贡献:构建Chat-AD数据集,设计Comparison Encoder显式建模图像差异,以及采用多阶段训练策略。实验表明,该方法在MMAD基准上达到82.29%准确率,定位任务提升3.35倍,并展现出良好的泛化能力。消融实验验证了比较模块的有效性,表明其成功源于高质量比较数据与显式比较模块的协

blanokvaffy的博客 330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

UIAutomator API浅析

转自http://blog.sina.com.cn/s/blog_ae2575ff01018b2o.html 从android sdk api 16开始,Android SDK开始支持两个做功能UI测试的新工具。 uiautomatorviewer,一个用以扫描以及分析Android应用程序的UI部件的工具。 以及uiautomator ,一个提供API用以自定义UI测试的J

Jacey's Blog 1652

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

uiautomator2使用api

''' uiautomator2使用api 原文地址:https://github.com/openatx/uiautomator2 1、 atx的将安装步骤: pip install --pre -U uiautomator2 # atx经常更新,所以用这个命令安装最新版手机接到电脑上之后,需要先运行一下命令 python -m uiautomator2 init 将需要...

qq_38648652的博客 5955

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

uiautomator API

本文主要介绍如下内容, 一, UiAutomator是什么鬼? 二,Python-UiAutomator又是什么鬼? 三, Python-UiAutomator API介绍 四,重要查看工具:UiAutomatorViewer 五,Python编辑器推荐:Pycharm 让我们怀着一颗好奇的心,逐个看看我们刚刚列出的以上几条吧。 一, UiAutomator是什么鬼? UiAutomator是go...

suzhiyu521的博客 655

Uiautomator—Java API详解

原文链接:http://www.cnblogs.com/by-dream/p/4921701.html#3328376   以一个简单的例子开始吧。我们完成一个 " 打开QQ,进入QQ空间,然后退出 " 的case。   代码如下: package QQ; import java.io.IOException; import com.android.uiautomator.cor...

山顶冻人的博客 1万+
上一篇: Java Debug小技巧记录
下一篇: 如何提交Code到google open source android gerrit
AnnaLoad
博客等级 码龄17年 7粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值