最近在学习如何使用 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"));//最后一行为将计算器的结果放置到参数中,然后再对比预期
}
第一次发帖,希望对小伙伴有一定的帮助作用。如果小伙伴觉得还蛮有帮助的话,就支持一下吧!你的支持与鼓励,是我不断前行的动力哦!