【学以致用】android功能实现2---UIautomator 2.0(1)

本文介绍了UiAutomator 2.0,它是Android应用UI自动化测试的重要工具。通过模拟用户操作,根据预期流程和结果进行测试。测试代码位于androidTest目录,使用adb命令和InstrumentationTestRunner启动。测试方法包括获取测试工具、找到交互目标、执行操作和验证结果。UiDevice提供了点击、拖拽、获取信息和实体按键模拟等功能,用于实现全面的交互测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UiAutomator是用于自动化测试的,更明确的说,是可视化的自动化测试的,用来测试android应用的UI交互相关内容。

 

UiAutomator 2.0UiAutomator的升级版,使用方式没有区别,会其中一个,就会另外一个。

 

UiAutomator 2.0是通过模仿用户的确切操作,根据能否完整完成整个预期操作流程,以及得到期望的结果,来判断是否完成整个测试流程。在使用时,首先有明确的交互,写好自动化测试用例后,可以确保后续代码开发维护中,自动化测试对应的交互不变。

 

UiAutomator 2.0的代码位置和使用:

代码我们放置于androidTest,通过写入APK或者生产jar包,然后用adb命令启动自动化测试。

 

android工程里面src栏目下面有3大项目:maintestandroidTest 其中androidTest就是用来编写自动化测试用例的。

 

在此栏目下创建类,里面对于的测试方法用@test标注,方法名字也以test开头。将整个文件夹都run到手机里,通过adb命令的时候,里面的测试内容会先以类的名字,然后以方法的名字,字母排序依次运行。

 

如果需要写UiAutomator的测试内容,则首先要在libs里面添加UiAutomator的包,并且导入编译器,在写好一个又一个的test代码后,就可以通过adb命令运行了。

 

Adb命令的关键词是instrument,即adb shell am instrument,用来启动JUnit的Runner。

 

JUnit是指从Apache基金会下载的junit.jar里提供的一系列单元测试功能。这些功能运行本来JDK之上,但Android下已经没有了JDK,自然也无法运行JUnit。但是由于我们利用JUnit编写单元测试。所以运行单元测试时,一定要用JDK来运行,利用java命令来启动JUnit的某个Runner 

 

android.test.InstrumentationTestRunner是用来启动测试的,其特征是不通过activity来启动应用,启动的是没有界面的应用,最终写法如下:

adb shell am instrument -w [packageName]/android.test.InstrumentationTestRunner

 

输入对于的packageName,通过instrument 启动InstrumentationTestRunner运行该packageName对应的测试内容。

 

以上是一个现成的测试怎么启动,以及将测试写在哪个地方。

 

 

 

 

测试是也在androidTest里面的任意类的以@test开头,且方法名为test开头的方法中。

那么应该怎么样来写这些测试方法呢。

 

最简单的UiAutomator测试用例分为4个部分,大多数的测试用例也是分为4个部分。

 

获取测试工具,找到交互目标,进行操作行为,判断操作结果。这么4步合起来完成一个交互行为的自动化测试。

 

1.获取测试工具:

这个是有套路的代码

UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

通过UiDevice获取其硬件系统,即手机本身。

之前提到过UiAutomator是模拟用户的行为来进行交互测试,就是将人工测试的内容自动化。那么一个人对交互的测试行为第一步,拿起手机,这个就是获取测试工具---手机。

 

UiDevice可以调用手机能给与的功能,寻找手机里的各种组件,模拟点击,滑动,拖拽等操作,对应实体按键,home键,back键等。

具体来说就是:

获取组件

findObjectBySelector

 

用于点击和拖拽的:

click(int x,int y) 实现点击手机上对应的点

drag(int start X ,int start y ,int end X ,in tent Y,int steps) 从手机一个坐标拖拽到另一个指定坐标。

 

获取信息

getCurrentPackageName()获取当前活跃应用的包名。

getDisplayHeight()获取设备的显示高度,以像素为单位。经常用作,clickdrag的坐标点计算

 

锁屏和唤醒

Sleep()锁屏,模拟电源键的一种情况。

WakeUp()唤醒。模拟电源键的另一种情况。

Isscreeon()检查屏幕是否唤醒。配合着上面两个方法使用,可以检查上面两个方法是否已经作用

   

实体按键

Pressback()

Presshome()

Pressmenu()

 

滑动

Swipe(int start X ,int start y ,int end X ,in tent Y,int steps) 从某一个位置滑动到另一个位置。

和drag的区别是,drag开始是长按后移动,Swipe点击后移动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值