最近在学习如何使用 UiAutomator 来进行安卓 APP 的自动化测试,也把对应的实现步骤总结了一番,现在把这个东西分享出来,希望能够帮助到也正在学习 APP 自动化测试的小伙伴咯!今天就先介绍下环境的搭建,后面再继续更新一些更详细的内容。因为是自己总结的,所以可能会有不够详细的地方。第一次发帖,欢迎各位指正和支持哈!😁

一、环境准备,在开始之前,需要准备以下环境:
1、集成 ADT 的 eclipse 开发工具。
2、Java 的 jir 和 jdk 环境,
3、Android-sdk 的环境,主要是要把 platforms 里的 Android 固件下载一个全的。具体如下:

4、Android-sdk 的环境,检查 tools 下是否把 UiAutomator 下载好。
5、新建一个安卓虚拟机,需记得虚拟机对应的 Android 固件版本。
6、系统环境变量中,把对应的工具路径加到 Path 中,如:;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
注:加上后,在命令指示符中输入 android 及 adb version 来检查环境变量是否配置正确,不返回 “不是内部命令” 就配置正确了。

二、准备好环境后,我们先在 eclipse 中创建一个 UiAutomator 的测试用例工程,具体如下:
1、创建一个 Java 工程

2、点击下一步,对工程添加对应的 jar 类库,主要有 junit 类

3、添加对应的的外部类库,这里是添加对应于虚拟机的安卓固件版本中的两个类库,具体如下


添加完成后,需要使用的支持类库全览:

4、工程建好之后,我们再给这个工程新建一个类,新建类的时候,主要要注意选择 “superclass“
这个地方,需要搜索,并选择创建对应的 UI automator 测试用例工程。


5、到这里,Ui Automator 测试用例工程就已经建好。小伙伴们可以按照上面的流程来试着搞搞,搞好后我们再继续深入学习。

以下是样例代码,初学的小伙伴可以先了解了解,至于代码的讲解,以及如何通过这些代码来实现手机 APP 的自动化测试,我后面会再给各位小伙伴做详细的分享。


package u_day01;

import com.android.uiautomator.testrunner.UiAutomatorTestCase;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import android.os.RemoteException;



public class Learn_UiAuto_day01 extends UiAutomatorTestCase {

//下面代码为抛出无法正常获取UI的异常命令  
public void testcase() throws UiObjectNotFoundException,RemoteException {

        UiDevice device=getUiDevice();
        device.wakeUp();
        UiObject calcico1=new UiObject(new UiSelector().className("android.widget.TextView").instance(2));//此行为获取进入应用管理页面的元素的代码,并点击,class、instance、resourceId都可以一直往后加,越多定位越准确
        assertTrue("the icon does not exist",calcico1.exists());
        calcico1.click();



        UiObject icom=new UiObject(new UiSelector().index(3));//此行为进入了应用管理页面后,点击对应的应用图标(计算器)。并判断是否存在。
        assertTrue("the icon does not exit",icom.exists());
        System.out.println("the icon has been found ");
        icom.click();
        sleep(5000);



        UiObject btn1=new UiObject(new UiSelector().className("android.widget.Button").resourceId("com.android.calculator2:id/digit_1"));//检验并点击1、2、+、=按钮并点击,这里是结合了classname和resourceId名来进行获取
        assertTrue("The '1'button is not found.",btn1.exists());
        btn1.click();

        sleep(1000);

        UiObject btnplus=new UiObject(new UiSelector().className("android.widget.Button").resourceId("com.android.calculator2:id/op_add"));
        assertTrue("the '+'button is not found",btnplus.exists());
        btnplus.click();

        sleep(1000);

        UiObject btn2=new UiObject(new UiSelector().className("android.widget.Button").resourceId("com.android.calculator2:id/digit_5"));
        assertTrue("The '5' button is not found",btn2.exists());
        btn2.click();

        sleep(1000);

        UiObject btnequ=new UiObject(new UiSelector().resourceId("com.android.calculator2:id/eq"));
        assertTrue("the '='button is not found",btnequ.exists());
        btnequ.click();

        sleep(1000);


        UiObject edtresult=new UiObject(new UiSelector().className("android.widget.EditText"));
        System.out.println("OutPut Result:\r\n"+edtresult.getText());
        assertTrue("The results should be 6 !",edtresult.getText().contains("6"));//最后一行为将计算器的结果放置到参数中,然后再对比预期

    }

第一次发帖,希望对小伙伴有一定的帮助作用。如果小伙伴觉得还蛮有帮助的话,就支持一下吧!你的支持与鼓励,是我不断前行的动力哦!😁


↙↙↙阅读原文可查看相关链接,并与作者交流