这两天屡次发现使用Uiautomator做输入的时候,输进去的内容不是自己想要的。研究发现:录制时的键盘字母位置和回放时的字母位置不同了。其实,这种情况在安全性比较高的App上经常会遇到。譬如:招商银行输密码的安全键盘,某网站登录页密码栏等。这种技术手段肯定是值得赞美的,但是同时给咱们的自动化测试带来了不便。为了提高用例执行的准确性,原先依赖Uiautomator获取键盘坐标的方法就显得比较low了;下面提供一种经研究后觉得可行的思路来优化一下。
图像分割、查找
键盘字母所在的位置始终是Uiautomator赖以执行的核心,这点不变;微调的是录制方法和回放方法多了图像处理这个环节,看下图:
多出来的环节均针对下面这种界面进行操作:(为了保护隐私,找了一个普通的参照物)
录制中:先将键盘按钮拆分成一系列的小图标,每一个图标均有自己的唯一名称作为标识,每一个图标的中心点坐标,左上角至右下角的坐标均记录在案;当键盘被手指触碰后,根据触碰点位置所枚举出来的最大值与下列图标某个中心坐标位置进行绑定,进而找到点击的“目标图”;
回放中:就没有太多可以说的了。因为与之前文章中提到思路和算法一致;就是通过小图比大图找到在位于大图中的坐标位置,然后将新坐标交给Uiautomator或者机械手去点击,然后再断言就可以了;
最后,该思路并非是对应移动端浮动键盘的唯一解;在此抛砖引玉,欢迎大家一起前来讨论,共同解决难题!^_^