51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

uiautomator的简单应用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-1 15:29:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Uiautomator一直想找时间去学习,但是不得空。


来了一个十一假,单身狗没有约会,只能默默在家待着了,在android的sdk目录下的tools目录中有这么一个特别好用的工具,这个事它的主界面:


然后我们可以通过adb指令去获取到这个界面的xml布局文件:

对应XML文件中的信息,我们就可以根据控件节点的属性找到文件的范围,根据控件的范围可以计算出中心坐标点。


最后一条adb指令就可以点击这个控件了:

adb shell input tap x y


简单介绍之后的实力示例:

  1. # coding=utf-8
  2. import os
  3. import re
  4. import time
  5. import subprocess
  6. import xml.etree.cElementTree as ET

  7. PATH = lambda p: os.path.abspath(
  8.     os.path.join(os.path.dirname(__file__), p)
  9. )

  10. def Script(Script):
  11.         return os.popen(Script).read()

  12. def GetActivitXml(FileName):
  13.         adbscript='adb devices -l'
  14.         Script('adb shell uiautomator dump /data/local/tmp/'+FileName+'.xml')
  15.         Script('adb pull /data/local/tmp/'+FileName+'.xml ./')
  16.         Script('adb shell rm -r /data/local/tmp/'+FileName+'.xml')å

  17. def Tapxy(x,y):
  18.         Script('adb shell input tap '+str(x)+' '+str(y))

  19. def putNodeType(Element):
  20.         # print Element.attrib['index']
  21.         # print Element.attrib['text']
  22.         print Element.attrib['resource-id']
  23.         # print Element.attrib['class']
  24.         # print Element.attrib['package']
  25.         # print Element.attrib['content-desc']
  26.         # print Element.attrib['checkable']
  27.         # print Element.attrib['checked']
  28.         # print Element.attrib['clickable']
  29.         # print Element.attrib['enabled']
  30.         # print Element.attrib['focusable']
  31.         # print Element.attrib['focused']
  32.         # print Element.attrib['scrollable']
  33.         # print Element.attrib['long-clickable']
  34.         # print Element.attrib['password']
  35.         # print Element.attrib['selected']
  36.         # print Element.attrib['bounds']

  37. def GetElementXY(FileName,TypeName,TypeValue):       
  38.         print u"当前界面寻找【"+TypeName+u"】为【"+TypeValue+u"】的元素"
  39.         GetActivitXml(FileName)
  40.         tree = ET.ElementTree(file=PATH(FileName+".xml")) #加载XML文件
  41.         ElementList = tree.iter(tag="node")        #获取所有node节点
  42.         Xpoint=0;
  43.         Ypoint=0;
  44.         for Element in ElementList:#节点遍历
  45.                 if Element.attrib[TypeName] == TypeValue :
  46.                         bounds = Element.attrib["bounds"]
  47.             # 通过正则获取坐标列表
  48.                         pattern = re.compile(r"\d+")
  49.                         bound = pattern.findall(bounds)
  50.                         # print bound
  51.                         Xpoint=(int(bound[0])+int(bound[2]))/2
  52.                         Ypoint=(int(bound[1])+int(bound[1]))/2
  53.         return (Xpoint, Ypoint)

  54. def TestCase():
  55.         ADElement=GetElementXY("TestTemp","text",u"浏览器")
  56.         Tapxy(ADElement[0],ADElement[1])
  57.         time.sleep(0.5)

  58.         ADElement=GetElementXY("TestTemp","resource-id","com.android.browser:id/windows")
  59.         Tapxy(ADElement[0],ADElement[1])
  60.         time.sleep(0.5)

  61.         ADElement=GetElementXY("TestTemp","resource-id",u"com.android.browser:id/multi_window_add")
  62.         Tapxy(ADElement[0],ADElement[1])
  63.         time.sleep(0.5)

  64.         ADElement=GetElementXY("TestTemp","resource-id","com.android.browser:id/windows")
  65.         Tapxy(ADElement[0],ADElement[1])
  66.         time.sleep(0.5)

  67.         ADElement=GetElementXY("TestTemp","text",u"关闭全部")
  68.         Tapxy(ADElement[0],ADElement[1])
  69.         time.sleep(0.5)

  70.         ADElement=GetElementXY("TestTemp","text",u"取消")
  71.         Tapxy(ADElement[0],ADElement[1])
  72.         time.sleep(0.5)

  73.         ADElement=GetElementXY("TestTemp","text",u"关闭全部")
  74.         Tapxy(ADElement[0],ADElement[1])
  75.         time.sleep(0.5)

  76.         ADElement=GetElementXY("TestTemp","text",u"关闭")
  77.         Tapxy(ADElement[0],ADElement[1])
  78.         time.sleep(0.5)

  79.         ADElement=GetElementXY("TestTemp","resource-id",u"com.android.browser:id/menu_wrapper")
  80.         Tapxy(ADElement[0],ADElement[1])
  81.         time.sleep(0.5)

  82.         ADElement=GetElementXY("TestTemp","resource-id",u"com.android.browser:id/quit")
  83.         Tapxy(ADElement[0],ADElement[1])
  84.         time.sleep(0.5)


  85. if __name__ == '__main__':
  86.         for x in xrange(1,100):
  87.                 print "===============第"+str(x)+"遍测试============="
  88.                 TestCase()
复制代码




本帖子中包含更多资源

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

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

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 11:19 , Processed in 0.063477 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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