首页 > 其他分享 >【Uiautomator2】基本使用

【Uiautomator2】基本使用

时间:2022-11-09 10:01:13浏览次数:54  
标签:基本 text app uiautomator2 使用 duration Uiautomator2 click 属性

一、环境搭建

1.1 安卓设备

确保安卓设备端已开启开发者选项,连接电脑并确保执行adb devices可以看到设备连接状态。

1.2 安装 uiautomator2

运行 pip install -U uiautomator2 安装 uiautomator2。

运行 python -m uiautomator2 init 安装服务到手机(在过去的版本中,这一步是必须执行的,但是从1.3.0之后的版本,当运行 u2.connect() 时就会自动推送这些文件)。

命令行运行python,打开python交互窗口,输入以下命令到窗口中:

import uiautomator2 as u2
d = u2.connect()  # connect to device
print(d.info)

看到类似下面的输出,就可以正式开始使用uiatumator2了。

{'currentPackageName': 'com.android.launcher3', 'displayHeight': 1600, 'displayRotation': 0, 'displaySizeDpX': 450, 'displaySizeDpY': 800, 'displayWidth': 900, 'productName': 'PCRT00', 'screenOn': True, 'sdkInt': 25, 'naturalOrientation': True}

1.3 安装 weditor

运行 pip install -U weditor (或指定某一版本)安装weditor。(安装失败时可降低版本)

命令行直接输入weditor(或python -m weditor)会自动打开浏览器,输入设备的ip(WIFI连接)或者序列号(USB连接),点击Connect即可,Dump Hierarchy用于界面同步。

二、常用API

2.1 设备连接

uiautomator2 连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点:WIFI可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段的情况下。

2.1.1 通过WIFI连接

import uiautomator2 as u2
d = u2.connect('192.168.0.100')

2.1.2 通过USB连接

import uiautomator2 as u2
d = u2.connect_usb('123456f')

2.2 应用管理

2.2.1 安装应用

d.app_install('http://some-domain.com/some.apk')    # app的url

d.app_install(data="./example.apk")     # app的本地路径

2.2.2 运行应用

d.app_start(package_name)    # package_name:应用包名
d.app_start("com.netease.cloudmusic")

2.2.3 关闭应用

d.app_stop(package_name)

2.2.4 获取当前界面的APP信息

d.app_current()

2.2.5 获取应用信息

d.app_info(package_name)

2.2.6 卸载应用

d.app_uninstall(package_name)

2.3 文件操作

2.3.1 向设备推送文件

d.push(src, dst)
# 将foo.txt推送至设备的/sdcard/文件夹下
d.push("foo.txt", "/sdcard/")   
# 将foo.txt推送至设备的/sdcard/文件夹下,并重命名为bar.txt
d.push("foo.txt", "/sdcard/bar.txt")

2.3.2 从设备拉取文件

d.pull(src, dst)
d.pull("/sdcard/01.png", "D:/UIAutomator2/01.png")

2.4 交互

2.4.1 点击

  • 点击屏幕上某一点坐标:
d.click(x, y)
  • 点击某一元素(元素未找到时报错):
# 输入参数timeout(可选):等待元素出现的超时时间
# 输入参数offset(可选):(x,y)的偏移量,默认(0.5,0.5),点击元素的中心点
# 未找到元素提示UiObjectNotFoundError
d(属性=属性值).click(timeout, offset)
d(text="歌单").click(timeout=10)
  • 点击某一元素(元素未找到时不报错):
# 输入参数timeout(可选):等待元素出现的超时时间
# 元素存在返回True, 元素未找到返回False
d(属性=属性值). click_exists(timeout)
d(text="歌单"). click_exists ()

2.4.2 双击

  • 双击屏幕某一点坐标:
d.double_click(x, y)

2.4.3 长按

  • 长按屏幕某一点坐标:
# duration:长按的时间(浮点型)
d.long_click(x, y, duration)
  • 长按某一元素:
# duration:长按的时间(浮点型)
d(属性=属性值).long_click(duration)

2.4.4 拖拽

  • 从一点拖拽到另一点:
# duration:拖拽的时长,默认0.5
d.drag(sx, sy, ex, ey, duration)
  • 拖拽元素至某一个坐标点:
# x:拖拽终点的x坐标(浮点型)
# y:拖拽终点的y坐标(浮点型)
# duration:拖拽的时长
d(属性=属性值).drag_to(x, y, duration)

2.4.5 滑动

# sx:滑动起点x坐标(浮点型)
# sy:滑动起点y坐标(浮点型)
# ex:滑动终点x坐标(浮点型)
# ey:滑动终点y坐标(浮点型)
d.swipe(sx, sy, ex, ey)

2.5 文本操作

2.5.1 输入文本

d(属性=属性值).send_keys(text)
d(属性=属性值).set_text(text)

2.5.2 获取文本

d(属性=属性值).get_text()

2.5.3 清空文本

d(属性=属性值).clear_text()

2.6 截图

  • 屏幕截图:

d.screenshot(filename)    # filename:文件保存路径
  • 控件截图:
d(属性=属性值).screenshot().save(filepath)

2.7 获取属性

2.7.1 获取元素属性

d(text="每日推荐").info

2.7.2 获取设备属性

  • 输出测试设备的所有信息:
d.device_info
  • 获取屏幕分辨率:
d.window_size()
  • 获取IP地址:
d.wlan_ip
  • 获取序列号:
d.serial

2.8 按键操作

  • d.press(keynames)
d.press("home")     #按下home键
d.press("back")     #按下back键

keynames目前支持:home、back、left、right、up、down、center、menu、search、enter、delete ( or del)、recent (recent apps)、volume_up、volume_down、volume_mute、camera、power。

  • d.keyevent
d.keyevent('enter')

keyevent 是通过“adb shell input keyevent”方式输入,支持按键更加丰富。

更多详细的按键信息: https://developer.android.com/reference/android/view/KeyEvent.html

2.9 Shell

安卓系统是基于Linux系统开发,也就支持常见的Linux命令,这些命令存在手机/system/bin的目录下,连接手机就可以使用adb shell来执行这些命令。

d.shell(command)    # command:字符型或者列表型
# 输出当前工作路径:
output, exit_code = d.shell("pwd")
# 列出当前目录下的文件:
output, exit_code = d.shell(["ls"])

 

标签:基本,text,app,uiautomator2,使用,duration,Uiautomator2,click,属性
From: https://www.cnblogs.com/direwolf22/p/16869544.html

相关文章

  • 你是如何使用React高阶组件的?
    HighOrderComponent(包装组件,后面简称HOC),是React开发中提高组件复用性的高级技巧。HOC并不是React的API,他是根据React的特性形成的一种开发模式。HOC具体上就是一个接受......
  • Vue技术之“关于sortable排序的使用”
    Vue关于sortable排序的使用方案1在使用sortable后要注意给el-table-column中加入prop="overdueDays"参数,不然会找不到需要排序的数据<el-table-columnprop="overdueDa......
  • 使用jwt鉴权(jsonwebtoken)
    1.下载jsonwebtokennpmi-Sjsonwebtoken2.引用constjwt=require('jsonwebtoken');3.需要设置秘钥constsecretKey='3.14159263528542852651268541';4.设......
  • 使用ansible实现haproxy轮询
    ansible实现haproxy轮询项目环境:主机名IP地址用户ansible192.168.100.141gregnode1192.168.100.142rootnode2192.168.100.143rootnode3192.16......
  • 使用ansible部署lamp
    使用Ansible部署Lamp项目环境:主机IP地址用户ansible192.168.100.110gregnode1192.168.100.120root实验步骤:部署Apache:首先控制端和受控端需要......
  • AnimatorOverrideController使用
    #需要用到这几个文件(1)状态机动画文件:可以是一套真实的动画,也可以是一套占位动画,这边使用了占位动画:ColorAnim_Placeholder.anim,ScaleAnim_Placeholder.anim,PosAn......
  • clion使用winmm.lib库文件(在MinGW中是libwinmm.a)
    偶然刷B站看到了一个up主用c++演奏《起风了》链接:https://www.bilibili.com/video/BV1tv4y1D7iW?t=35.5我的编译器是clion找了半天才学会的使用;把代码中的#pragmacom......
  • valheim英灵神殿Linux使用docker开服
    valheim英灵神殿Linux使用docker开服使用机器:2核4G的Ubuntu,swap设置为8G(满足配置能装docker的Linux就行)在docker官网的镜像站有别人封装好的镜像,我们下载下来启动就可......
  • debian 默认使用命令行启动
    打开defaultgrub配置$sudovi/etc/default/grub修改以下3处内容找到行GRUB_CMDLINE_LINUX_DEFAULT="quiet",加#注释掉这一行配置,修改为#GRUB_CMDLINE_LINUX_DEFAU......
  • 使用pycharm操作git
    1.大前提:先在settings里面把git配上打开Pycharm, 点击File->Settings->VersionControl-->Git,在PathtoGitexecutable中选择本地的git.exe路径:   2.......