uiautomator特殊用法总结
uiautomator接口库里有很多常用方法,本章只是简单的介绍一些我在实际工作中常用的方法和心得。
-
打开App
这个几乎是自动化测试人员必用方法,我一开始使用的是公司自己封装的api,它接口方法是app_start(‘package’,‘activity’)。在绝大多数操作时是没问题的,但是会出现一些个别app打开无效的情况。但是我用原生uiautomator就不会出现此类问题。d.app_start('package')
-
滑动操作
# 垂直滑动到底部/顶部 d(scrollalbe=True).fling.toEnd() d(scrollable=True).fling.toBeginning() # 滚动至文字出现 d(scrollable=True).scroll.to(text="AAAA")
-
获取文字
当我们需要获取一个text或者description经常会变化的控件时,该如何操作,例如如图获取电池百分比。很明显电池的电量不是固定的,它会随着时间和使用而随之减少或充电增加。法一:
# 利用xpath进行定位获取元素所有信息info info = d.xpath('//*[@resource-id="com.android.settings:id/donut"]').info result_use = info["contentDescription"] # 字典查找 print(result_use)
法二:
# 循环加all() 来对text进行查找 for i in d.xpath( '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout[' '9]/android.widget.RelativeLayout[1]/android.widget.TextView[2]').all(): text = i.text print(text)
-
button按钮状态
现在很多安卓设备的一些开关操作换成了button,点击一下开/关。我们人眼观察很容易知道它的状态,如果不小心关闭了我们发现了再手动给它打开即可。
但是在自动化测试过程中我们如何来判断或者确认,某个开关的状态ON/OFF。
以Wi-Fi开关为例:怎么判断我的Wi-Fi是开启还是关闭了呢?# 利用xpath和text判断该相机按钮是否开启 if d.xpath('//*[@resource-id="com.mediatek.camera:id/expand_view"]/android.widget.Switch[1]').text == "ON": pass else: print(‘该相机开关按钮处于关闭状态‘)
-
页面存在多个button
如果页面存在多个相同属性的元素可以使用instance进行选择;
如三个相同的元素他们的resourceid和ClassName选择一个即可,然后在使用instance:
第一个:d(resourceId="com.netease.cloudmusic:id/a6w", className="android.widget.ImageView").click()
第二个:d(resourceId="com.netease.cloudmusic:id/a6w", className="android.widget.ImageView", instance=1).click()
第三个:d(resourceId="com.netease.cloudmusic:id/a6w", className="android.widget.ImageView", instance=2).click()或者也可以利用weditor工具一层一层去找该控件的xpath
-
拖拽功能
#将text拖拽到某一点 d(text='AAAA').drag_to(500, 500, duration=0.5) #将resourceId拖拽到某一点 d(resourceId='com.android.calendar:id/header').drag_to(500, 500, duration=0.5) #将text拖拽到text d(text='AAAA').drag_to(text='aaaa', duration=0.5)
-
其他
网上有很多别人整理的uiautomator的API文档,值得参考学习:
一:https://www.cnblogs.com/sc912/p/11279228.html
二:https://www.cnblogs.com/sc912/p/11283665.html
三:https://www.cnblogs.com/sc912/p/11284660.html