奇技淫巧:移动端ui自动化中解决支付安全键盘无法获取的问题
2018-03-28 本文已影响69人
石头城里听驼铃
问题的背景
移动端ui自动化过程中,有时候我们经常会遇到安全支付输入的问题,尤其是笔者所在的金融公司;经常需要输入支付密码,而一般安全键盘往往是特殊绘制而成,隐藏了实现细节,无法通过Android SDK工具uiautomatorviewer获取到,ios更直接获取不到元素的层级关系:例如以下场景:
image.png
解决方法
常规的解决方法有两类:
- 通过opencv图像识别获取,网上已有相关的代码,可以直接参考,然而受限于不同图片的分辨率及大小比例,要想保持一个较高的精确度需要较高的技术水平;
- 让开发打包,去除安全键盘的限制;代码入侵,不推荐;
笔者不成熟的解决方法
由于所测APP安全键盘位置及顺序固定,其实可以通过一定的算法精确获取每个数字控件的坐标轴;分析项目源代码可知,每个数字元素的高度都为50dp,而我们只需要将其换算成像素即可大致算出每个数字在屏幕中的坐标位置,同时也解决了多分辨率的问题。因此我们可选取一个参照物,获取到该元素跟dp的比例作为分辨率;具体代码如下,笔者选取了登陆页面的姓名输入框作为参照物;
具体某个数字坐标轴的获取
根据密码点击坐标轴
欢迎随时交流,针对安全键盘,还没有一个通用的处理方法,例如考虑更复杂的情况,加入键盘上的元素每次都乱序排列又该如何解决?