zoukankan      html  css  js  c++  java
  • uiautomator2 入门教程

    一、前言

      在 Android 自动化测试方面,Google 提供了一个基于 Java 开发的库 UiAutomator,基本上支持所有的 Android 事件操作,使用简单。

           在此基础上,有大佬开发出了一个 Python 的第三方库 uiautomator,原理是在手机上运行了一个http rpc服务,将uiautomator中的功能开放出来。

           在此之后,因为该库太久没有更新,又有大佬 fork 了一个版本,解决了一些问题,也增加了一些特性,使得功能更加强大了,这个库就叫做 uiautomator2

    二、环境配置

    1.ADB 环境

      以 Windows 系统为例,首先需要下载一个 SDK 工具:https://developer.android.com/studio/releases/platform-tools,下载完成后解压得到如下内容:

       然后就是添加环境变量了,将该目录路径加入到环境变量中,添加完毕后打开 CMD 窗口输入“adb version”命令,若出现如下内容,则表明环境变量配置成功:

     2.Python 环境

      要使用 uiautomator2,需要 Python3.6 以上的版本,Python 安装成功以后,输入“pip install uiautomator2”安装 uiautomator2。

    三、使用方法

      首先需要一台开启了开发者权限的安卓手机,部分手机的开启步骤为:设置--关于手机--连续点击版本号数次,开启成功后可以在设置里找到类似“开发人员选项”的设置项,然后再打开“USB调试”功能,即可以通过 USB 连接对手机进行调试,最后将手机连接到电脑上,在 CMD 窗口中输入“adb devices”查看当前连接的设备,如下图所示即为连接成功:

      手机成功连接后,执行如下命令,会在手机上安装一些调试所需的程序,例如 atx-agent。

    python -m uiautomator2 init

      要对手机进行调试,最重要的问题就是如何定位元素,推荐使用工具 weditor 来解决这个问题,该工具只需要执行命令“pip install weditor”即可安装,然后在 CMD 窗口中输入“python -m weditor”会自动在浏览器中打开一个调试页面,如下图所示:

       “Connect”按钮用于连接设置,左侧输入框可以输入设备号或者 IP 地址(即支持 USB 连接或者通过 WiFi 连接),“Dump Hierarchy”用于进行同步,当你操作手机后,页面可能未同步,就可以点击该按钮进行同步。当然了,也可以在该页面上直接操作手机,例如点击元素、输入内容等,使用还是很方便的。

    四、命令简介

    1.连接设备

      支持 USB 或者 WiFi 与设备进行连接,支持同时连接单个或多个设备。

    1 import uiautomator2 as u2
    2 
    3 
    4 # 一个设备时可简写,多个设备时添加设置号参数
    5 d = u2.connect(

    2.应用操作

     1 import uiautomator2 as u2
     2 
     3 
     4 d = u2.connect()
     5 
     6 # 启动指定应用
     7 d.app_start("com.example.app")
     8 # 启动指定应用,启动前停止此应用
     9 d.app_start("com.example.app", stop=True)
    10 # 停止指定应用
    11 d.app_stop("com.example.app")
    12 # 当前运行中的所有应用
    13 d.app_list_running()
    14 # 停止所有应用
    15 d.app_stop_all()
    16 # 安装应用
    17 d.app_install(data="./example.apk")

    3.触控操作

     1 import uiautomator2 as u2
     2 
     3 
     4 d = u2.connect()
     5 
     6 # 点击
     7 d.click(1, 1)
     8 # 双击
     9 d.double_click(1, 1)
    10 # 双击,指定间隔时间
    11 d.double_click(1, 1, 0.1)
    12 # 长按
    13 d.long_click(1, 1)
    14 # 长按,指定停留时间
    15 d.long_click(1, 1, 5)
    16 # 通过元素的文本信息进行点击,会点击文本所在元素的中心位置
    17 d(text="Settings").click()
    18 
    19 d.swipe(10, 10, 20, 20)
    20 # 右滑
    21 d.swipe_ext("right")
    22 # 右滑,滑动距离为屏幕宽度的90%
    23 d.swipe_ext("right", scale=0.9)
    24 # 拖拽
    25 d.drag(1, 1, 10, 10)
    26 
    27 # 模拟按下
    28 d.touch.down(10, 10) 
    29 # 模拟移动
    30 d.touch.move(15, 15)
    31 # 模拟抬起
    32 d.touch.up() 

     

    作者:TM0831
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利.
  • 相关阅读:
    JAVA Rest High Level Client如何取聚合后的数据
    elasticsearch中TermQuery查不到数据问题
    项目中redis改brpop阻塞模式为订阅模式的实现(二)
    项目中redis改brpop阻塞模式为订阅模式的实现(一)
    《算法笔记》5. 前缀树、桶排序、排序算法总结
    《算法笔记》4. 堆与堆排序、比较器详解
    《算法笔记》3. 归并排序、随机快排整理
    《算法笔记》2. 链表、栈、队列、递归、哈希表、顺序表
    《算法笔记》1. 复杂度、排序、二分、异或
    深入理解Java线程状态转移
  • 原文地址:https://www.cnblogs.com/TM0831/p/15017241.html
Copyright © 2011-2022 走看看