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

创建一个新的测试类,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 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、执行测试


最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
Menxg-1715807261458)]

[外链图片转存中…(img-1duoYxyo-1715807261459)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值