UiAutomator

文章介绍了如何在Android中使用Espresso和UIAutomator进行自动化测试。Espresso适用于单个活动的交互测试,而UIAutomator则能跨活动和应用操作。UiDevice是设备的抽象,用于模拟按键操作和启动应用;UiObject则用于选取和操作界面上的控件。文章详细展示了各种代码示例,包括启动应用、模拟按键、选取控件以及处理RecyclerView和滚动列表的方法。
摘要由CSDN通过智能技术生成

运行Espresso和UI Automator测试时要使用模拟器。国内手机的ROM大多进行过修改,可能加入很多限制,导致测试无法正常运行。

Espresso只支持一个活动内部交互行为的测试。跨越多个活动、多个应用的场景需要使用UI Automator。使用Espresso和UI Automator的测试代码要保存在src/androidTest/目录下。在使用UI Automator时,首先要建立一个UiDevice对象。UiDevice对象表示一台设备。通过UiDevice你可以按下主页键、返回键,可以打开应用、选择界面上具有某个属性的控件等。

Listing 1: 获取UiDevice对象

val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

Listing 2: 通过UiDevice启动应用

val context = InstrumentationRegistry.getInstrumentation().targetContext
val intent = context.packageManager.getLaunchIntentForPackage(packageName)?.apply {
  addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}

context.startActivity(intent)
device.wait(Until.hasObject(By.pkg(packageName).depth(0)), timeoutMillis)

Listing 3: 通过UiDevice模拟按下主页键、返回键

device.pressHome()
device.pressBack()

Listing 4: 通过UiDevice获取前台应用包名

device.currentPackageName

UiDevice提供了方法findObject(uiSelector: UiSelector):UiObject来获取界面上的某个控件。UiObject表示一个控件。UiSelector是选择控件的类。

Listing 5: 按资源id选择控件

device.findObject(UiSelector().resourceId("com.my.app:id/button_ok")

Listing 6: 按界面文字选择控件

device.findObject(UiSelector().text("click here"))

如果指定属性的控件不存在,findObject仍然会返回一个UiObject对象。此时UiObject.exists()返回false。通过UiObject可以模拟对控件的操作,比如点击click()、输入文字setText("hello, world!")等。在控件显示之前调用findObject将会得到一个exists() == false的UiObject对象。此时调用click()等方法将会引发异常。为避免此情况,可以调用UiDevice::wait或UiObject::waitForExists方法等待控件渲染完毕。

Listing 7: 使用UiDevice.wati等待控件渲染

device.wait(Until.hasObject(By.text(text)), timeoutMillis)
device.wait(Until.hasObject(By.res(packageName, "${packageName}:id/${resourceId}")), timeoutMillis)

对于RecyclerView这类的列表,可以使用UiCollection来选择其中的子元素控件。UiCollection的构造函数有一个UiSelector参数,这个参数用于选择容器(如RecyclerView)控件。通过UiCollection.getChild(UiSelector)可以获取子元素控件进行操作。UiCollection只能获取已经显示出来的子元素控件。对于长的可滚动列表,如果目标子元素在屏幕之外,UiCollection或抛出异常。此时要使用UiScrollable。UiScrollable是UiCollection的派生类。从上面的介绍可以看出,UiDevice和UiObject是两个核心类,UiDevice可以对设备进行操作,UiObject可以对控件进行操作。

Table 1: UiDevice常用方法
方法说明
findObject(uiSelector):UiObject
freezeRotation()
isScreenOn()
pressBack()
pressHome()
pressMenu()
pressSearch()
setOrientationLandscape()
setOrientationLeft()
setOrientationNatural()
setOrientationPortrait()
setOrientationRight()
sleep()
takeScreenshot(storePath, scale, quality)
unfreezeRotation()
wait(condition, timeout)
wait(condition, timeout)
waitForIdle()
waitForIdle(timeout)
wakeUp()
Table 2: UiObject常用方法
方法说明
clearTextField()清除可编辑文字
click()点击
dragTo(uiObject,steps)拖拽
exists():Boolean判断存在
getChild(uiSelector):UiSelector选择子元素控件
getText()获取text属性
isCheckable():Boolean
isChecked():Boolean
isClickable():Boolean
isEnabled():Boolean
isFocusable():Boolean
isFocused():Boolean
isLongClickable():Boolean
isScrollable():Boolean
isSelected():Boolean
longClick()
performMultiPointerGesture(…)
performTwoPointerGesture(…)
setText(text)
swipeDown(steps)
swipeLeft(steps)
swipeRight(steps)
swipeUp(steps)
waitForExists(timeout)
waitUntilGone(timeout)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值