APP自动化测试框架-UiAutomator2基础( 二 )

4)停止应用$ uiautomator2 stop com.example.app # 停止一个app$ uiautomator2 stop --all # 停止所有的app3.元素定位1)常见定位方式ui2支持 android 中 UiSelector 类中的所有定位方式,详细可以查看官网:
https://developer.android.com/reference/android/support/test/uiautomator/UiSelector,以下仅列出几种常见的定位方式:
定位方式
描述
text
通过文本定位
textMatches
通过文本正则匹配定位
className
通过类名定位
classNameMatches
通过类名正则匹配定位
description
通过desc属性定位
descriptionMatches
通过desc属性正则匹配定位
resourceId
通过resourceId定位
resourceIdMatches
通过resourceId正则匹配定位
2)子元素定位及兄弟元素定位① 子元素定位-child#查找类名为android.widget.ListView下的Bluetooth元素d(className="android.widget.ListView").child(text="Bluetooth")# 下面这两种方式定位有点不准确,不建议使用d(className="android.widget.ListView").child_by_text("Bluetooth",allow_scroll_search=True)d(className="android.widget.ListView").child_by_description("Bluetooth")② 兄弟元素定位-sibiling#查找与google同一级别,类名为android.widget.ImageView的元素d(text="Google").sibling(className="android.widget.ImageView")③ 链式调用d(className="android.widget.ListView", resourceId="android:id/list").child_by_text("Wi?Fi", className="android.widget.LinearLayout").child(className="android.widget.Switch").click()3)相对定位d(A).left(B),# 选择A左边的Bd(A).right(B),# 选择A右边的Bd(A).up(B), #选择A上边的Bd(A).down(B),# 选择A下边的B#选择 WIFI 右边的开关按钮d(text='Wi?Fi').right(resourceId='android:id/widget_frame')4) Xpath定位Java uiautoamtor中默认不支持xpath,这是属于ui2的扩展功能,速度会相比其它定位方式慢一些 。在xpath定位中,ui2中的description 定位需要替换为content-desc,resourceId 需要替换为resource-id
# 只会返回一个元素,如果找不到元素,则会报XPathElementNotFoundError错误# 如果找到多个元素,默认会返回第0个d.xpath('//*[@resource-id="com.android.launcher3:id/icon"]')# 如果返回的元素有多个,需要使用all()方法返回列表# 使用all方法,当未找到元素时,不会报错,会返回一个空列表d.xpath('//*[@resource-id="com.android.launcher3:id/icon"]').all()4.元素常用API 方法
描述
返回值
备注
exists()
判断元素是否存在
True,Flase
@property
info()
返回元素的所有信息
字典
@property
get_text()
返回元素文本
字符串
 
set_text(text)
设置元素文本
None
 
clear_text()
清空元素文本
None
 
center()
返回元素的中心点位置
(x,y)
基于整个屏幕的点
send_keys()
发送文本
 
 
用法示例:
d(test="Settings").existsd.exists(text='Wi?Fi',timeout=5)5.设备交互1)单击/双击d(text='Settings').click()# 单击d.double_click(x, y)d.double_click(x, y, 0.1) # 双击默认时间间隔0.1s2)长按d(text='Settings').longclick()# 长按3)滑动# "left", "right", "up", "down"d(text="Settings").swipe("up", steps=20)# 元素向上滑动,步长20d(text="Settings").swipe("down", steps=20)# 元素向下滑动d(text="Settings").swipe("left", steps=20)# 元素向左滑动d(text="Settings").swipe("right", steps=20)# 元素向右滑动4)拖动d(text="Settings").drag_to(text="Clock", duration=0.25)# 拖动到某个元素,时长0.25秒d(text="Settings").drag_to(877,733)# 拖动到屏幕某个坐标点,duration时长默认0.5秒5)双指操作(元素放大/缩小)d(text="Settings").pinch_in()# 缩小d(text="Settings").pinch_out()# 放大6)等待元素出现/消失d(text="Settings").wait(timeout=3.0)# 等待元素出现d(text='Settings').wait_gone(timeout=20)# 等待元素消失,返回True False,timout默认为全局设置的等待时间7)屏幕滚动# 垂直滚动到页面顶部/横向滚动到最左侧d(scrollable=True).scroll.toBeginning()d(scrollable=True).scroll.horiz.toBeginning()# 垂直滚动到页面最底部/横向滚动到最右侧d(scrollable=True).scroll.toEnd()d(scrollable=True).scroll.horiz.toEnd()# 垂直向后滚动到指定位置/横向向右滚动到指定位置d(scrollable=True).scroll.to(description="指定位置")d(scrollable=True).scroll.horiz.to(description="指定位置")# 垂直向前滚动(横向同理)d(scrollable=True).scroll.forward()# 垂直向前滚动到指定位置(横向同理)d(scrollable=True).scroll.forward.to(description="指定位置")# 滚动直到System元素出现d(scrollable=True).scroll.to(text="System")


推荐阅读