ADB+UiAutomator实现智能精准化测试

上一篇文章介绍了一种基础性的自动化测试工具ADB,同时描述了如何将ADB封装后自动化在手机端执行;该方法勉强可以让手机“动”起来,但时间久了会觉得繁琐前期的坐标录入和用例执行时的不可控是该工具面临的两个最大的弊端;因此,考虑如何让手机智能化的读懂测试者的心声,如何提升回放的精准性是首要解决的问题!


引入UiAutomator智能化获取元素

Uiautomator对自动化测试同学来说并不陌生;使用UIAutomatorViewer可以清晰的找到所选元素的属性列表:(这里暂且叫它XML树)

ADB+UiAutomator实现智能精准化测试_第1张图片

是不是很吃惊?右边FrameLayout红框中居然显示了“WLAN”这行元素的所有属性;index|class|package等;那这意味着什么?

说明,我们可以利用这个先决的便利条件,把元素获取出来,再传给Uiautomator去执行回放;

换句话说:我们可以利用Uiautomator去执行回放,便可大大提升回放时的精准性;

再换句话说:将红框中的部分看成一个对象,一个Node,一个树的节点,只要把这个对象交给Uiautomator,它就可以在手机的界面上画个框框,是不是也就能再对象上进行操作了?!(怎样把对象交给Uiautomator我们放到最后讲,这里不是重点)

重点是如何将手指点击位置和上文中的这个“对象”联系起来

这里就不得不提到大家耳熟能详的ADB了,废话少说,直接上代码:

adb shell getevent

输出格式 --> 设备名: 事件type 事件code 事件value

ADB+UiAutomator实现智能精准化测试_第2张图片

这里的0035和0036分别表示屏幕上的X坐标和Y坐标,后面的值表示具体的坐标点,通过16进制转换可以得到值1142和1527,随便找个手机的屏幕分辨率为800*480的,很明显两个点是完全不匹配,那如何转换呢?

在cmd中输入adb shell getevent -p

ADB+UiAutomator实现智能精准化测试_第3张图片

找到您的屏幕设备中0035和0036的含义,我的手机中可以看到x的值min为0,max为1172,y的值min为0,max为1900。

这样就找到您的设备的坐标具体大小值,这里计算公式如下:

x=(x-xmin)*480/(xmax-xmin) ;

y=(y-ymin)*800/(ymax-ymin);

得到触碰点坐标后,千万别高兴太早,核心点在最后这一步:需将坐标点带入到上面的XML树中去反查该坐标属于哪个树节点。(具体的算法就不在这里做介绍了,实现方式有很多种,具体以性能最优为佳;如实在没有头绪可以私聊)

将查到的对象构造出来交给Uiautomator实现精准执行

ADB+UiAutomator实现智能精准化测试_第4张图片

总结:

以上方法智能化的监控了人在手机界面的一系列操作,实现了操作时的跟随录制,并以元素操作的方式实现了精准性回放;对自动化测试本身来说实现了往智能化方向的转变,并留下可以参数化构建用例,持续集成式回放的可能,扩展性较强。

你可能感兴趣的:(ADB+UiAutomator实现智能精准化测试)