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

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点击后移动。

猜你喜欢

转载自blog.csdn.net/dax120/article/details/78679956