51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1804|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    无聊
    2024-9-27 10:07
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2018-5-30 15:51:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    引入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实现精准执行


    总结:

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


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 21:28 , Processed in 0.076613 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表