uiautomator特殊用法总结

uiautomator接口库里有很多常用方法,本章只是简单的介绍一些我在实际工作中常用的方法和心得。

  1. 打开App
    这个几乎是自动化测试人员必用方法,我一开始使用的是公司自己封装的api,它接口方法是app_start(‘package’,‘activity’)。在绝大多数操作时是没问题的,但是会出现一些个别app打开无效的情况。但是我用原生uiautomator就不会出现此类问题。

         d.app_start('package')
    
  2. 滑动操作

         # 垂直滑动到底部/顶部
         d(scrollalbe=True).fling.toEnd() 
         d(scrollable=True).fling.toBeginning()
         # 滚动至文字出现
         d(scrollable=True).scroll.to(text="AAAA")
    
  3. 获取文字
    当我们需要获取一个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)
    
  4. button按钮状态
    现在很多安卓设备的一些开关操作换成了button,点击一下开/关。我们人眼观察很容易知道它的状态,如果不小心关闭了我们发现了再手动给它打开即可。
    但是在自动化测试过程中我们如何来判断或者确认,某个开关的状态ON/OFF。
    以Wi-Fi开关为例:怎么判断我的Wi-Fi是开启还是关闭了呢?

    我们在用weditor来确认控件信息时会发现其实这个按钮是有text信息的。 那我们是不是可以用该控件的其他信息➕text信息进行判断Wi-Fi状态
         # 利用xpath和text判断该相机按钮是否开启
         if d.xpath('//*[@resource-id="com.mediatek.camera:id/expand_view"]/android.widget.Switch[1]').text == "ON":
               pass
         else:
               print(‘该相机开关按钮处于关闭状态‘)
    
  5. 页面存在多个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

  6. 拖拽功能

         #将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)
    
  7. 其他

网上有很多别人整理的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

posted @ 2020-11-29 17:05  是超级可爱的小姚童鞋  阅读(237)  评论(0编辑  收藏  举报