一、Android Studio安装
Android Studio是Google开发的一款针对Android开发的IDE,由于UiAutomator2.0基于Instrumentation运行,所以脚本需要打包成应用程序APK push到device执行,并且它还是依赖gradle构建,So,我可以理解为Google是在规范大家使用Android Studio。
Android Studio下载地址:https://developer.android.google.cn/studio/
安装过程就不多说了,直接下一步下一步安装即可(网上非常多教程)。但前提是已经安装好了SDK等android环境,参考《Appium基础学习之 | 环境搭建》。如不先安装SDK,在安装完Android Studio后进入SDK下载阶段,等待会非常痛苦,所以建议先安装好SDK环境。
二、UiAutomator2.0使用
1.新建项目
打开Android Studio,新建项目,在Activity选项时选择Add No Activity2
2.添加UiAutomator2.0的依赖
最新版的Android Studio默认的Instrumentation已经变成AndroidJunitRunner,在以前支持的是instrumentationTestRunner,在很多参考博文中依然还是可以看到instrumentationTestRunner的影子,这两个的区别在后面说Instrumentation时候一起说。
3.编写代码
创建项目后,在src\androidTest\java\xxx包路径下会自动成一个测试类ExampleInstrumentedTest
@RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { private UiDevice mdevice; private Context ct; @Before public void init(){ //通过Instrumentation得到UiAutomation连上AccessibilityService mdevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); ct = InstrumentationRegistry.getContext(); } @Test public void useAppContext() { try { //在设备中得到com.main包的引用 Intent testIntent = ct.getPackageManager().getLaunchIntentForPackage("ymxh.main"); //启动com.main应用的Activity ct.startActivity(testIntent); //等待窗口中,com.main应用窗口内容发生改变 mdevice.waitForWindowUpdate("ymxh.main",5*2000); //执行点击操作 mdevice.findObject(new UiSelector().text("Web自动化")).click(); }catch (Exception e){ e.printStackTrace(); } } }
ymxh.main这个应用是为了测试自己写的一个APK的包名,并且已经在设备中安装好了,一定要注意必须安装,否则startActivity会失败。下载地址:https://pan.baidu.com/s/16L3b4WFif50AaGFE-elufQ
(1)@RunWith(AndroidJunit4.class)表示以Junit4支持的运行器执行测试
(2)@Before、@Test是Junit4支持的注解
(3)得到UiDevice是通过调用getInstance()得到,入参的InstrumentationRegistry.getInstrumentation()得到的是一个Instrmentation实例
(4)通过Intent启用应用,当然也可以继续用UiAutomator1.0的方式启动应用,只是因为UiAutomator2.0是android项目,它在运行时可以使用Android非常丰富的API来协助测试完成
4.运行代码
在测试类中单机鼠标右键,选择Run
点击运行后,在设备中会请求安装2个APK应用,一个是主项目应用,一个是测试项目应用;安装完成后测试执行,执行的日志如下:
(1)运行开始后,首先Android Studio会构建项目形成2个APK,然后通过adb push把2个APK推送到设备安装
(2)安装完成后开始runing tests,通过adb shell am instrument命令运行
-w:与运行器配合使用,使用该参数表示等待运行器运行完成后返回,ymxh.uiautomation.uiauto2test.test/android.support.test.runner.AndroidJUnitRunner,表示使用AndroidJUnitRunner运行器来运行ymxh.uiautomation.uiauto2test.test下面的所有测试
-r:输入测试结果的形式
-e:后面带name value,如debug false表示debug模式关闭;class 'ymxh.uiautomation.uiauto2test.ExampleInstrumentedTest'指定运行的测试类,不指定则运行全部
三、埋伏笔
1.什么叫做运行器,比如AndroidJUnitRunner、instrumentationTestRunner?
2.UiAutomator2.0基于Instrumentation运行,好像非常复杂,这样做相对于UiAutomator1.0来说有什么优势呢?
3.adb shell am instrument命令的解析
三个问题都在后面说到Instrumentation一起分析,只有了解了instrumentation才能更好的说清楚这些问题。