Uiautomator2基础

文章目录

      • 安装
      • 连接到设备
      • 命令行
      • 全局设置
      • 应用管理
      • 其他
      • shell命令
      • Session会话
      • 检索设备信息
      • 关键事件

https://github.com/openatx/uiautomator2
uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库

安装

  • 装uiautomator2
    pip install --upgrade uiautomator2
    pip install pillow
  • 部署守护进程
    python -m uiautomator2 init
  • 装weditor UI查看器
    pip install -U weditor
    运行python -m weditor
  • 备注:每次启动时运行python -m uiautomator2 init 和 python -m weditor就可以了

连接到设备

  • 通过wifi连
    要求设备IP和pc在同一网络中
    import uiautomator2 as u2
    d = u2.connect(‘设备ip’)
    print(d.info)
  • 通过usb连
    import uiautomator2 as u2
    d = u2.connect(‘设备序列号’)
    print(d.info)
  • u2.connect()不带参数调用,uiautomator2将从环境变量中获取设备ip(ANDROID_DEVICE_IP),如果此环境变量为空,则uiautomator将退回到connect_usb,需要保证只有一台设备连接到电脑

命令行

其中$device_ip代表设备的ip地址

  • init:设备安装所需要的程序
  • install:安装apk,apk通过url给出
    $ python -m uiautomator2.cli install $device_ip https://example.org/some.apk
  • clear-cache:清除缓存
    $ python -m uiautomator2 clear-cache
  • app-stop-all:停止所有应用
    $ python -m uiautomator2 app-stop-all $device_ip
  • screenshot:截图
    $ pyrhon -m uiautomator2 screenshot $device_ip screenshot.jpg
  • healthcheck:健康检查
    $ python -m uiantomator2 healthcheck $device_ip

全局设置

  • 包含一些全局设置
  • 调试HTTP请求
    跟踪HTTP请求和响应
    d.debug = Ture
    d.info
  • 隐含的等待
    设置默认元素等待时间,单位秒
    d.implicitly_wait(10.0)
    d.click()#如果ui元素对象没有实时出现,则会触发10s的等待
    会影响click、long_click、drag_to、get_text、set_text、clear_text等

应用管理

  • 安装应用
    只支持从url安装apk
    d.app_install(‘apk的url’)
  • 启动应用
    d.app_start(‘包名’)
  • 停止应用
    d.app_stop(‘包名’)#相当于am force-stop(强杀进程)
    d.app_clear(‘包名’)#相当于pm clear(清除应用数据)
  • 停止所有运行的应用
    d.app_stop_all()#停止所有应用
    d.app_stop_all((excludes=[‘1’])#清除包名为1以外的所有应用
  • 获取应用信息
    d.app_info(‘包名’)
    • 保存应用icon
      img = d.app_icon(‘包名’)
      img.save(“img.png”)

其他

  • 将文件推送到设备
    d.push(“foo.txt”,"/sdcard")
    d.push(“foo.txt”,"/sdcard/bar.txt")#重新命名为bar.txt
    d.push(“foo.sh”, “/data/local/tmp/”, mode=0o755)#更改文件的访问模式
    • 推送文件的fileobj对象
      with open(“foo.txt”, ‘rb’) as f:
      d.push(f, “/sdcard/”)
  • 从设备中提取文件
    d.pull("/sdcard/tmp.txt",“tmp.txt”)
    d.pull("/sdcard/some-file-not-exists.txt",“tmp.txt”)#
    如果在设备没有找到文件将引发FileNotFoundError错误
  • 检查并维持设备端守护进程处于运行状态
    d.healthcheck()
  • 自动点击权限对话框(不稳定)

shell命令

  • 运行具有超时保护的短期shell命令(默认timeout=60秒)
    • atx-agent >=0.3.3才支持timeout
    • 举例:output, exit_code = d.shell(“pwd”, timeout=60)#相当于adb shell pwd(打印当前目录)
    • 第一个参数可以是列表
      output, exit_code = d.shell([“ls”, “-l”])#相当于adb shell ls -l(打印当前目录下的所有文件)
    • 不适用于长时间运行的命令
  • 运行长时运行的shell命令
    增加stream=True,会返回requests.models.Response对象
    r = d.shell(“logcat”,stream=True)

Session会话

  • 会话代表应用程序生命周期,可用于启动应用,检测应用崩溃
  • 启动并关闭应用
    sess = d.session(“包名”)#启动应用
    sess.close()#关闭应用
  • 使用python with启动并关闭应用
    with d.session(“包名”) as sess:
    sess(text=“Play”).click()
  • 附加到正在运行的应用程序
    sess = d.session(“包名”, attach=True)
  • 检测应用崩溃
    • 当app正在运行时
      sess(text=“Music”).click()#操作正常
    • 当app崩溃或退出
      sess(text=“Music”).click()#抛出SessionBrokenError异常
      会话下的其他函数调用也会引发SessionBrokenError异常
    • 检查会话是否正常
      sess.running() # 返回布尔值

检索设备信息

  • 获取基本信息
    d.info
    返回基本信息,dict类型
  • 获取窗口大小
    print(d.widow_size())
  • 获取最新的应用信息
    print(d.current_app())
    部分安卓设备输出可能为空
  • 等待活动
    d.wait_activity(".ApiDemos", timeout=10)
    返回布尔值
  • 获取设备序列号
    print(d.serial)
  • 获取wlan ip
    print(d.wlan_ip)
  • 获取详细的设备信息
    print(d.device_info)
    返回数据比d.info全

关键事件

  • 打开、关闭屏幕
    d.screen_on()#打开屏幕
    d.screen_off()#关闭屏幕
  • 获取当前屏幕状态
    d.info.get(‘screenOn’)#安卓4.4以上才支持
  • 按硬/软键
    d.press(“home”) # home键
    d.press(“back”) # back键
    d.press(0x07, 0x02) # 键码为0x07, 0x02的键
    • https://developer.android.com/reference/android/view/KeyEvent
      -目前支持的
      back、left、right、up、down、center、menu、search、enter、delete ( or del)、recent (recent apps)、volume_up、volume_down、volume_mute、camera
  • 解锁屏幕
    d.unlock()
    相当于启动活动、按home键

你可能感兴趣的:(自动化测试)