文档章节

uiautomator的简单应用

Bony
 Bony
发布于 2016/10/06 19:42
字数 603
阅读 315
收藏 1

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

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

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

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

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

adb shell input tap x y

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

# coding=utf-8
import os
import re
import time
import subprocess
import xml.etree.cElementTree as ET

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

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

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

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

def putNodeType(Element):
	# print Element.attrib['index']
	# print Element.attrib['text']
	print Element.attrib['resource-id']
	# print Element.attrib['class']
	# print Element.attrib['package']
	# print Element.attrib['content-desc']
	# print Element.attrib['checkable']
	# print Element.attrib['checked']
	# print Element.attrib['clickable']
	# print Element.attrib['enabled']
	# print Element.attrib['focusable']
	# print Element.attrib['focused']
	# print Element.attrib['scrollable']
	# print Element.attrib['long-clickable']
	# print Element.attrib['password']
	# print Element.attrib['selected']
	# print Element.attrib['bounds']

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

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

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

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

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

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

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

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

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

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

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


if __name__ == '__main__':
	for x in xrange(1,100):
		print "===============第"+str(x)+"遍测试============="
		TestCase()

欢迎沟通学习。。。~~~

© 著作权归作者所有

Bony
粉丝 14
博文 156
码字总数 98892
作品 0
深圳
QA/测试工程师
私信 提问
万物有源_Android自动化测试框架UIAutomator原理浅析

简介 UIAutomator是一个Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试。所以UIAutomator只能运行在Android4.1之后的...

维他ViTa
03/16
173
0
5个最佳的Android测试框架

谷歌的Android生态系统正在不断地迅速扩张。有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸、ROM /固件、芯片组以及等等等等,层出不穷。于是乎,对于Android开发人员而言...

IT追寻者
2016/06/21
62
0
UIAutomator2.0记录

UIAutomator是不支持HyBrid项目的UI测试的,各种爬楼之后找到了一种方法,特此记录 去应用商店下载一款叫TalkBack的软件, 装到手机上,是没有页面的,有的手机需要的设置-辅助功能中开启,开启之后...

Magic_锋
03/06
44
0
Uiautomator_Eclispe_Build_Run_plugins 插件安装和配置指南

UiautomatorEclispeBuildRunplugins 插件安装和配置指南 * Uiautomator自动化框架的缺点是编译和运行起来非常麻烦,需要手动执行CMD指令 * 这个插件主要是为了解决Uiautomator框架编译和运行...

乱取名字
2016/07/13
44
0
2014 非常好用的开源 Android 测试工具

当前有很大的趋势是转向移动应用平台,Android 是最广泛使用的移动操作系统,2014 年大约占 80% 以上的市场。在开发 Android 应用的时候要进行测试,现在市场上有大量的测试工具。 本文主要是...

oschina
2014/10/15
39.3K
11

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部