zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    declare handler 声明异常处理的语法
    mysql存储过程获取sqlstate message_text
    mongoTemplate操作内嵌文档
    mysql索引之七:组合索引中选择合适的索引列顺序
    mongoDB的操作总结
    explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二
    状态模式
    代码重构----使用java有限状态机来消除太多的if else判断
    断路器(CircuitBreaker)设计模式
    断路器之一:Hystrix 使用与分析
  • 原文地址:https://www.cnblogs.com/blackpink/p/14056917.html
Copyright © 2011-2022 走看看