前言
前面我们已经了解Uiautomator的基本知识,并且学习了API的用法,因此对于我们来说完成一个UI自动化测试脚本并不难,但是如何将UI自动化应用在实际的项目中,帮我们提高测试的效率呢?本节我们就说说,UI自动化应该怎么去完成。
我们以微信"小视屏"这个功能为例,来完成本次自动化测试的讲解。(鉴于隐私原因,默认在执行脚本前,微信已经是登录状态)
分析
当我们要完成一个自动化时,需要考虑这个用例需要怎么设计,需要测试哪些项,怎么验证,出现错误时应该如何处理。
首先需要明确一点,并不是所有需求文档上提到的功能,我们都必须用自动化方式去验证,由于UI自动化本身的局限性,UI自动化的可行度不是100%的准确,因此我们只对“小视屏”的卖点功能进行自动化验证,你也可以理解为对该功能做一个冒烟测试。
小视屏功能的入口一共是三个,分别是下面这三个地方:
我们除了要验证这地方的入口外,还需要在其中一处完成对小视屏的发送,并且验证小视屏发送成功。因此我们可以按照下面流程来进行测试脚本的编写,流程图如下所示:
编码前准备
有了流程图之后,不要迫不及待的编码。编码之前也需要考虑考虑,是否有一些公共的方法可以提取出来做为一个单独的函数呢?
1、点击操作
首先,点击的操作是Uiautomator中用的最多的,而根据控件id和text来做为索引则是更多的。因此我们封装如下的内容:
/* 定义“通过哪种方式来获得uiselector”的int标识, 如果以后想添加别的方法(例如 通过description 来获取),则可以参考此形式进行扩充 */ final int CLICK_ID = 2000; final int CLICK_TEXT = 2001; /* 实现具体的外部可以调用的函数 */ // 通过id来进行点击操作 public boolean ClickById(String id) { return ClickByInfo(CLICK_ID, id); } // 通过text来进行点击操作 public boolean ClickByText(String text) { return ClickByInfo(CLICK_TEXT, text); } /* 封装出通用的点击方法,供上面的public函数调用 如果以后想添加别的方法(例如 通过description 来获取),则可以在switch中扩充 */ private boolean ClickByInfo(int CLICK, String str) { UiSelector uiselector = null; // switch根据不同的CLICK标识,创建出UiSelector的对象 switch(CLICK) { case CLICK_ID: uiselector = new UiSelector().resourceId(str); break; case CLICK_TEXT: uiselector = new UiSelector().text(str); break; default: return false; } // 根据UiSelector对象构造出UiObject的对象 UiObject uiobject = new UiObject(uiselector); // 判断该控件是否存在 if(!uiobject.exists()) { return false; } // 点击 try { uiobject.click(); } catch (UiObjectNotFoundException e) { e.printStackTrace(); } return