TA的每日心情 | 无聊 2024-9-27 10:07 |
---|
签到天数: 62 天 连续签到: 1 天 [LV.6]测试旅长
|
引入UiAutomator智能化获取元素
Uiautomator对自动化测试同学来说并不陌生;使用UIAutomatorViewer可以清晰的找到所选元素的属性列表:
(这里暂且叫它XML树)
是不是很吃惊?右边FrameLayout红框中居然显示了“WLAN”这行元素的所有属性;index|class|package等;
那这意味着什么?
说明,我们可以利用这个先决的便利条件,把元素获取出来,再传给Uiautomator去执行回放;
换句话说:我们可以利用Uiautomator去执行回放,便可大大提升回放时的精准性;
再换句话说:将红框中的部分看成一个对象,一个Node,一个树的节点,只要把这个对象交给Uiautomator,
它就可以在手机的界面上画个框框,是不是也就能再对象上进行操作了?!(怎样把对象交给Uiautomator
我们放到最后讲,这里不是重点)
重点是如何将手指点击位置和上文中的这个“对象”联系起来
这里就不得不提到大家耳熟能详的ADB了,废话少说,直接上代码:
adb shell getevent
输出格式 --> 设备名: 事件type 事件code 事件value
这里的0035和0036分别表示屏幕上的X坐标和Y坐标,后面的值表示具体的坐标点,通过16进制转换可以
得到值1142和1527,随便找个手机的屏幕分辨率为800*480的,很明显两个点是完全不匹配,那如何转换呢?
在cmd中输入adb shell getevent -p
找到您的屏幕设备中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实现精准执行
总结:
以上方法智能化的监控了人在手机界面的一系列操作,实现了操作时的跟随录制,并以元素操作的方式实
现了精准性回放;对自动化测试本身来说实现了往智能化方向的转变,并留下可以参数化构建用例,持续
集成式回放的可能,扩展性较强。
|
|