首页 理论教育 UIAutomator的主要API详解

UIAutomator的主要API详解

更新时间:2025-01-10 工作计划 版权反馈
【摘要】:在正式编写UIAutomator脚本之前,先对UIAutomator的最基本和最关键的API进行简要介绍。UIAutomator通过UiObject提供了多点任意手势的API,具体如下:实现“多点触控手势”,可定义任意手势。命令如下:5.键值UIAutomator通过UiDevice提供了大量的按键发送API,下面简单介绍一些常用的方法。

在正式编写UIAutomator脚本之前,先对UIAutomator的最基本和最关键的API进行简要介绍。如果读者有兴趣,可以访问API的官网,里面有对每个API非常翔实的介绍。

1.手势

这里的手势包括拖拽、滑动、多点触控、缩放。

UIAutomator中拖拽的API是UiObject下的dragTo()方法,具体如下:

图10-19 UIAutomator Viewer控件捕获界面

图10-20 通过UIAutomator Viewer捕获界面的控件树

这个方法可以把一个对象拖拽到屏幕的某一个坐标位置,步长就是拖拽的速度。

滑动是通过UiDevice中的滑动(swipe())方法实现的,具体如下:

图10-21 通过UIAutomator Viewer捕获界面的单个控件详情

此外UIAutomator还提供了更好的滑屏方法,这些方法都来自UiObject。

(1)boolean swipeUp(int step):实现往上滑屏的方法,拖拽对象往上滑动。

(2)boolean swipeDown(int step):实现往下滑屏的方法,拖拽对象往下滑动。

(3)boolean swipeLeft(int step):实现往左滑屏的方法,拖拽对象往左滑动。

(4)boolean swipeRight(int step):实现往右滑屏的方法,拖拽对象往右滑动。

这几个滑屏的API不仅能够让滑屏操作变得精准,还可以避免以往拖拽造成的滑屏过度所引发的误操作。

具体的使用方法如下:

UIAutomator不仅支持多点触控,还封装了缩放手势。UIAutomator通过UiObject提供了多点任意手势的API,具体如下:

实现“多点触控手势”,可定义任意手势。

多点触控平时用得不多,但是缩放手势很常用,因此UiObject直接提供了两个方法:

(1)boolean pinchIn(int percent,int steps):

pinchIn()实现双指向内收缩手势操作,类似平时看图片时的缩小操作。其中percent表示滑到控件对角线的百分比位置,然后停止,steps表示时间,每一步是5ms。

(2)boolean pinchOut(int percent,int steps):

pinchOut()实现双指向外扩张手势操作,类似平时看图片时的放大操作。

案例7:实现手势操作。

2.点击、长按和输入

UIAutomator中点击操作的API是UiObject下的click()方法,具体如下:

boolean click()

click()方法实现了点击对象操作。

UIAutomator还提供了更强大的方法,那就是点击并等待新窗口的方法,这个方法可以让人们再也不用使用sleep()这个固定等待的方法了,具体如下:

boolean clickAndWaitForNewWindow(long timeout)

clickAndWaitForNewWindow()方法实现点击对象并等待新窗口出现,其中的参数为需要等待的时间。也可以直接不带参数,如下所示:

boolean clickAndWaitForNewWindow()表示如果新窗口没有出现就一直等待,没有超时时间。

案例8:实现点击操作。

长按在平时的操作里也是经常需要用到的,UIAutomator里直接通过UiObject的长按方法(longClick())实现:

boolean longClick()

longClick()方法实现了对某对象的长按操作。

UIAutomator通过UiObject的文本设置方法(setText())实现:

boolean setText(String text)

setText()方法实现在对象中输入文本。

案例9:实现文本输入操作。

除此之外,UiObject还提供了另外一个方法,可以让人们直接清除编辑框中的文本,而不用多次点击删除键,如下所示:

void clearTextField()

clearTextField()方法实现清除编辑框中的文本。

3.等待

UIAutomator针对等待操作进行了非常详细的划分,方法如下:

boolean waitForExists(long timeout)

waitForExists()方法实现等待对象出现。

该方法也可以实现等待对象消失,在实际操作中也存在这样的情况,等待某个窗口消失后才进行下一步的操作,这时waitUntilGone()方法就非常适用了,方法如下:

boolean waitUntilGone(long timeout)

waitUntilGone()方法实现等待对象消失。

那么如何判断对象是否已经消失呢?UIAutomator提供了判断对象是否存在的方法,如下所示:

boolean exists()

exists()方法检查对象是否存在。

案例10:实现等待注册按钮出现操作。

4.截图

自动化测试中很多步骤的结果需要使用截图进行保存,比如当出现错误时、实际测试结果跟预期结果不一致时,截图这个功能就显得尤为重要,方法如下:

boolean takeScreenshot(File storePath)

takeScreenshot()方法实现截图并将图像存储到指定路径。

下面通过一个案例来加深印象。

案例11:截图并保存到指定路径,最后导出到计算机进行查看。

完成以上代码后,可以通过在计算机的命令行里执行指定命令,将保存的图片复制到计算机的D盘根目录。命令如下:

5.键值

UIAutomator通过UiDevice提供了大量的按键发送API,下面简单介绍一些常用的方法。

(1)boolean pressBack():

pressBack()方法模拟短按BACK键。

(2)boolean pressHome():

pressHome()方法模拟短按HOME键。

(3)boolean pressMenu():

pressMenu()方法模拟短按MENU键。

(4)boolean pressEnter():

pressEnter()方法模拟短按ENTER键。

(5)boolean pressDelete():

pressDelete()方法模拟短按删除键。

(6)boolean pressRecentApps():

pressRecentApps()方法模拟按最近应用程序按键。

(7)boolean pressSearch():

pressSearch()方法模拟短按搜索键。

6.对象属性获取

获取某一个控件对象的属性在自动化脚本的编写中非常重要,UIAutomator也提供了相应的API,方法如下:(www.xing528.com)

(1)String getPackageName():

getPackageName()方法获取对象包名属性的包名。

(2)String getClassName():

getClassName()方法获取对象包名属性的类名。

下面介绍两个非常实用的获取控件对象属性的方法。

(1)String getContentDescription():

getContentDescription()方法获取控件对象的描述属性。

(2)String getText():

getText()方法获取控件对象的文本属性。

下面还是通过一个实例来加深印象。

案例12:获取TextView对象中的文本。

7.控件选择器

在案例12中出现了一个全新的方法UiSelector(),这个方法可以按照一定的条件筛选出界面上符合条件的控件。

找符合条件的控件,可以从文本、描述、包名或类名、控件ID等几个方面入手,通过一个或多个属性精准定位需要的控件,这样就能保证脚本的稳定性和可移植性。

下面介绍可以通过文本或字符串找到对应控件的方法。

(1)textStartsWith(String text):

textStartsWith()方法通过文本(开始字串匹配)方式进行控件筛选。

(2)textContains(String text):

textContains()方法通过文本(字串包含)方式进行控件筛选。

下面介绍通过描述信息找到对应控件的方法。

(1)description(String desc):

description()方法通过描述(字串匹配)方式进行控件筛选。

(2)descriptionStartsWith(String desc):

descriptionStartsWith()方法通过描述(开始字符匹配)方式进行控件筛选。

(3)descriptionContains(String desc):

descriptionContains()方法通过描述(字串包含)方式进行控件筛选。

下面介绍通过类名、包名和控件ID对控件进行匹配的方法。

(1)className(String className):

className()方法通过类名(字串匹配)方式进行控件筛选。

(2)packageName(String name):

packageName()方法通过包名(字串匹配)方式进行控件筛选。

(3)resourceId(String id):

resourceId()方法通过控件ID方式进行控件筛选。

8.控件采集器

UiCollection继承于UiSelector,它与UiSelector需要配合使用,主要用于枚举一个容器的用户界面元的数量,或按照子元素的文本或描述条件等获取该子元素对象。

可以理解成UiSelector属于一次过滤,找到符合条件的一个控件集合,UiCollection属于二次过滤,精确定位目标控件。

下面简单介绍UiCollection提供的几个方法。

(1)int getChildCout(UiSelector childPattern):

getChildCout()方法获取符合条件的子控件数量。

(2)int getChildByDescription(UiSelector childPattern,String text):

getChildByDescription()方法通过描述进行控件定位。

(3)int getChildByText(UiSelector childPattern,String text):

getChildByText()方法通过文本进行控件定位。

9.滚动

测试中经常会遇到需要屏幕滚动的情况,UIAutomator中对于滚动的定义分成两类,一类是非精确滚动,一种是精确滚动。

(1)非精确滚动相当于平时所说的向上滚动、向下滚动、向前滚动和向后滚动。方法如下:

①boolean scrollForward():

scrollForward()方法实现向前滚动,默认步长为55。

②boolean scrollForward(int steps):

scrollForward()方法实现自定义步长向前滚动。

③boolean scrollBackward(int steps):

scrollBackward()方法实现自定义步长向后滚动。

④boolean scrollBackward():

scrollBackward()方法实现向后滚动,默认步长为55。

⑤setAsHorizontalList():

setAsHorizontalList()方法实现将滚动方向设置为横向。

⑥setAsVerticalList():

setAsVerticalList()方法实现将滚动方向设置为纵向。

下面通过一个案例来加深印象。

案例13:在主界面滚动屏幕找到“模拟登录”。

(2)精确滚动是UIAutomator与众不同的地方,方法如下:

①boolean scrollIntoView(UiSelector selector):

scrollIntoView()方法实现滚动到目标元素所在位置,并尽可能使其位于屏幕正中位置。

②boolean scrollIntoView(UiObject obj):

scrollIntoView()方法实现滚动到目标对象所在位置,并尽可能使其位于屏幕正中位置。

③boolean scrollTextIntoView(String text):

scrollTextIntoView()方法实现滚动到文本对象所在位置,并尽可能使其位于屏幕正中位置。

④boolean scrollTextIntoView(String text):

scrollTextIntoView()方法实现滚动到文本对象所在位置,并尽可能使其位于屏幕正中位置。

⑤boolean scrollDescriptionIntoView(String text):

scrollDescriptionIntoView()方法实现滚动到描述所在位置,并尽可能使其位于屏幕正中位置。

下面结合一个案例来加深印象。

案例14:滚动捕获用户名编辑框对象。

10.监听器

只有添加了监听器,才可以知道什么时候事件被触发,UIAutomator提供了UiWatcher针对某一事件进行监听,方法如下:

(1)void registerWatcher(String name,UiWatcher watcher):

registerWatcher()方法实现注册一个监听器。

(2)void removeWatcher():

removeWatcher()方法实现移除之前注册的监听器。

(3)void resetWatcherTriggers():

resetWatcherTriggers()方法实现重置一个监听器。

(4)void runWatchers():

runWatchers()方法实现强制运行所有监听器。

(5)boolean hasAnyWatcherTriggered():

hasAnyWatcherTriggered()方法实现检查是否有监听器被触发过。

(6)boolean hasWatcherTriggered(String watcherName):

hasWatcherTriggered()方法实现检查某个特定的监听器是否被触发过。

案例15:监听器实例。

UIAutomator主要API总结如图10-22所示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈