写点什么

一封给 Android 开发者 UI 自动化测试上手指南

用户头像
Android架构
关注
发布于: 16 小时前

创建一个新的测试类,CalculatorTester,通过在?androidTest?目录下创建名为?CalculatorTester.java?的文件实现。创建的 UI 自动化测试用例,必须继承自InstrumentationTestCase



按?Alt+Insert 后选择?SetUp Method?来重写setUp方法。



再次按?Alt+Insert?后选择?Test Method?来生成新的测试方法,命名为testAdd。到此CalculatorTester类定义如下:


01 public class CalculatorTester extends InstrumentationTestCase{


02


03 @Override


04 public void setUp() throws Exception {


05


06 }


07


08 public void testAdd() throws Exception {


09


10 }


11 }


3、查看 Launcher UI




连接你的 Android 设备到电脑商,点击 home 按键,进入主界面。


返回


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


到你的电脑,使用文件管理或者终端浏览你安装 Android SDK 的目录,进入到?tools?目录下,点击?uiautomatorviewer?。这个会启动?UI Automater Viewer?,你将看到如下界面:



点击上方手机图标来获取 Android 设备截屏。注意到此时获取到的截屏是可交互的。点击下面的 Apps 图标。在右方的?Node Detail?区域,你就可以看到根据选择图标的不同显示不同的详细信息,如下图所示:



与屏幕上的应用交互,UI 自动化测试需要能唯一识别它们。在这个教程中,可以使用应用的textcontent-desc或者class字段来唯一的区分。


从上图可以看到 Apps 图标没有text字段,但有content-desc。记下它的值,后面将用到这个值。


拿起 Android 设备,触摸 Apps 图标,进入设备安装的所有应用界面。使用?UI Automater Viewe?获取另外一张屏幕截图。因为要写一个计算器应用的测试,点击计算器图标查看详细界面。



这次content-desc是空的,但是text的值为 Calculator,同样记住这个值。


如果你的 Android 设备运行不同的主界面或者不同的 Android 版本,界面和显示的细节会有所不同。这意味着后续代码中需要做一些修改,以匹配你的操作系统。


4、准备测试环境




返回到 Android Studio,给setUp方法中添加代码。如同其名字,setUp方法是用来准备测试环境的。换句话说,这个方法是在真正测试之前指定具体需要执行什么动作的。


现在需要写代码来模拟刚才在 Android 设备上执行的几个动作: 1、按 home 键进入主界面 2、按 Apps 图标进入应用界面 3、点击计算器图标启动它


在你的类中声明类型为UiDevice的变量device。它代表你的 Android 设备,后续使用它来模拟用户行为。


1 private UiDevice device;


setUp方法中,通过调用UiDevice.getInstance method来初始化device,传递Instrumentation实例,如下所示:


1 device = UiDevice.getInstance(getInstrumentation());


模拟点击设备 home 键,需要调用pressHome方法。


1 device.pressHome();


接下来,需要模拟点击 Apps 图标的动作。不能立即做这个动作,因为 Android 设备需要一个反应时间来加载界面。如果在屏幕显示出来之前执行这个动作就会引起运行时异常。


等待一些事情发生时,需要调用UiDevice实例的wait方法。等待 Apps 图标显示到屏幕,使用Until.hasObject方法。


识别 Apps 图标需要使用By.desc方法并传递值为 Apps 的参数。你还需要指定最长等待时间,单位为毫秒。此处设置为 3000。 至此形成如下代码段:


1 // Wait for the Apps icon to show up on the screen


2 device.wait(Until.hasObject(By.desc("Apps")), 3000);


要获取 Apps 图标的引用,需要使用findObject方法。一旦有了 Apps 图标的引用,就可以调用click方法来模拟点击动作了。


1 UiObject2 appsButton = device.findObject(By.desc("Apps"));


2 appsButton.click();


和前面一样,我们需要等待一些时间,保证计算器图标显示到屏幕上。在之前的步骤中,我们看到可以通过text字段唯一的识别计算器图标。我们调用By.text方法来找到图标,传递参数为Calculator


1 // Wait for the Calculator icon to show up on the screen


2 device.wait(Until.hasObject(By.text("Calculator")), 3000);


5、检查计算器 UI




在你的 Android 设备上启动计算器应用,使用?UI Automater Viewer?来查看显示。获取到一个截屏后,点击不同的按钮来观察使用何值可以唯一的区分它们。


在本次测试用例中,使用计算器计算?9+9=?的值并确认结果是否为?18。这意味着你需要知道怎么区分按键?9+?和?=



在我的设备上,如下是我收集到的信息:


  1. 数字按键匹配text

  2. +?和?=?使用content-desc值,分别对应?plus?和?equals

  3. 返回值显示在EditText控件中


如果你使用不同版本的计算器应用,请注意这些值有可能不一样。


6、创建测试类




在前面几步操作中,你已经学会了使用findObject方法通过By.text或者By.desc来获取屏幕上不同对象的引用。还学会了通过click方法来模拟点击对象的动作。下面的代码使用这些方法来模拟?9+9=。添加这些到类CalculatorTester的方法testAdd中。


01 // Wait till the Calculator's buttons are on the screen


02 device.wait(Until.hasObject(By.text("9")), 3000);


03


04 // Select the button for 9


05 UiObject2 buttonNine = device.findObject(By.text("9"));


06 buttonNine.click();


07


08 // Select the button for +


09 UiObject2 buttonPlus = device.findObject(By.desc("plus"));


10 buttonPlus.click();


11


12 // Press 9 again as we are calculating 9+9


13 buttonNine.click();


14


15 // Select the button for =


16 UiObject2 buttonEquals = device.findObject(By.desc("equals"));


17 buttonEquals.click();


现在就等待运行结果。此处不能使用Until.hasObject,因为包含计算结果的EditText已经显示在屏幕上了。取而代之,我们使用waitForIdle方法来等待计算完成。同样,最长等待时间是 3000 毫秒。


1 device.waitForIdle(3000);


使用findObjectBy.clazz methods方法获取EditText对象的引用。一旦有了此引用,就可以调用getText?方法来确定计算结果是否正确。


1 UiObject2 resultText = device.findObject(By.clazz("android.widget.EditText"));


2 String result = resultText.getText();


最后,使用assertTrue来检验范围值是否为 18


1 assertTrue(result.equals("18"));


测试到此结束。


6、执行测试




执行测试,需要在 Android Studio 的工具栏中选择CalculatorTester,点击它右方的 play 按钮。



一旦编译结束,测试就成功运行完整。当测试运行时,在你的 Android 设备上就会看到 UI 自动化运行界面。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
一封给Android开发者 UI 自动化测试上手指南