1、简介

  python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。

2、支持平台及语言

  python-uiautomator2封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。

3、python-uiautomator2主要分为两个部分

  python端:运行脚本,并向移动设备发送HTTP请求

  移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

4、环境搭建

  安装adb并使手机或模拟器与电脑连接, adb.exe的目录加入到系统的PATH中

  adb connect 127.0.0.1:62001 连接设备

  adb devices 查看连接设备

  adb shell

5、安装python-uiautomator2

  pip install --pre -U uiautomator

  pip install pillow

6、设备安装atx-agent

  python -m uiautomator2 init 最后提示success,代表atx-agent初始化成功。

7、python-uiautomator2连接手机的方式有两种

  import uiautomator2 as u2

  d = u2.connect(‘192.168.1.169’)  // 通过WIFI

  d = u2.connect_usb(‘123456f’)    // 通过USB(手机的序列号可以通过adb devices获取到,假设序列号是123456f)

  d.make_toast("Hello world", 3)

  sess = d.session("com.netease.cloudmusic") # 启动网易云音乐( com.ss.android.ugc.aweme )

  sess(text="私人FM").click()

例子(九宫格解锁):

  import uiautomator2 as u2

  u = u2.connect() # 手机连接到PC即可

  u.swipe_points([(0.235, 0.456), (0.503, 0.449), (0.509, 0.601), (0.777, 0.603), (0.771, 0.763), (0.222, 0.75)], 0.2)

8、抓取手机上应用的控件

  虽然很想用Android SDK内置工具uiautomatorviewer.bat,但是运行uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。

  于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用python-uiautomator2的两个接口screenshot和dump_hierarchy这样就不会有冲突问题了

9、安装weditor与运行

  pip install --pre weditor

  python -m weditor

10、定位方式

  a)、ResourceId定位:d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()

  b)、Text定位:d(text="秒表").click()

  c)、Description定位:d(description="..").click()

  d)、ClassName定位:d(className="android.widget.TextView").click()

11、操作控件

  # click d(text="Settings").click()

  # long click d(text="Settings").long_click()

  # 等待元素的出现 d(text="Settings").wait(timeout=10.0)

12、中文字符的输入

  d(text="Settings").set_text("你好")

如果定位不到元素需要使用send_keys方法,以及切换输入法

  d.set_fastinput_ime(True)

  d.send_keys("你好 Hello")

  d.set_fastinput_ime(False) # 输入法用完关掉

  截图:d.screenshot("home.jpg")

  获取图层信息:xml = d.dump_hierarchy()

https://github.com/openatx/uiautomator2 GitHub文档

ATX 浅谈自动化测试工具 python-uiautomator2的更多相关文章

  1. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...

  2. python itertool 浅谈迭代工具

    1.概述 Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: import itertools natuals ...

  3. 浅谈如何使用python抓取网页中的动态数据

    我们经常会发现网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念, 动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到 ...

  4. 浅谈开发中python通过os模块存储数据

    #其实本人很烦发博客,但为了面试还是发一下好,证明一下自己的能力 前言 首先说一下适用环境,在开发中我们有一些经常用到的数据(数据量大)需要存储起来. 存sql嘛又不合适,要知道在开发中每条sql语句 ...

  5. 浅谈装饰器(Python)

    先来了解函数和执行函数在python的区别   我再重新定义一个函数,在函数前面加上@set_func 执行结果如下:   函数前面没有加@set_fun 执行结果如下:   是不是可以不修改原来的函 ...

  6. 浅谈javascript和python语言的深拷贝

    深拷贝: 之前在开发中我遇到一个很大的bug,经过我多次调试之后我发现原本应该有保存数据的地方数据全部被清空,仔细一看发现原来是被人为删除,明明操作的是一个副本,为什么原本也会跟着一起被删除呢?经过了 ...

  7. 浅谈mongodb与Python的交互

    1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...

  8. 浅谈设计模式及python实现

    设计模式及Python实现   设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用 ...

  9. 浅谈bi工具的含义和不同类型

    ​什么是BI工具? 商业智能(BI)工具是利用一组方法和技术来准备,呈现和帮助分析数据的工具.通过此过程,数据将转化为可操作的业务信息,帮助决策者和最终用户做出更有效的数据驱动决策. 商业智能使用的一 ...

随机推荐

  1. PAT 1056 Mice and Rice

    #include <cstdio> #include <climits> #include <cstdlib> #include <vector> #i ...

  2. 关于Android那些事

    1.开发Activity步骤 第一步:写一个类继承Activity 第二步:重写oncreate方法 第三步:在主配置文件中注册activity <activity android:name=& ...

  3. Android 环信(Android)设置头像和昵称的方法

    最近,经常有朋友问到,如何集成环信头像,怎么才能快速显示头像,因时间紧急,很多朋友都没有时间慢慢的研究代码,这里大家稍微花10分钟看一下文章,看完后再花5分钟改一下代码,即可达到你们所要的效果. 当然 ...

  4. keras 保存训练的最佳模型

    转自:https://anifacc.github.io/deeplearning/machinelearning/python/2017/08/30/dlwp-ch14-keep-best-mode ...

  5. spring---FactoryBean与BeanFactory的区别

    1.BeanFactory BeanFactory是IOC最基本的容器,负责生产和管理bean,它为其他具体的IOC容器提供了最基本的规范,例如DefaultListableBeanFactory, ...

  6. js如何完整的显示较长的数字

    试试下面一行吧 Math.pow(10, 99).toLocaleString().split(',').join('') toLocaleString([character]) 方法会将其对象转换成 ...

  7. 加深理解HTTP请求---网络基础TCP/IP

    为了了解HTTP,必须的了解TCP/IP协议族. 通常使用的网络实在TCP/IP协议族的基础上运作的.而HTTP就属于他的一个子集. 1.TCP/IP 协议族 计算机与网络设备要相互通信,双方就必须基 ...

  8. 最简单的docker教程:在docker里运行nginx服务器

    命令行docker search nginx搜索名为nginx的docker image,返回结果的第一个,github上有10293个star,这就是我们想要搜索的结果: 使用命令docker pu ...

  9. CRM和ERP的Sales Organization的映射关系

    在如下的配置里可以维护CRM和ERP的Sales Organization的映射关系. 例如,ERP的编号为0001的销售组织映射到CRM的编号为O 50040102的销售组织: 这种映射关系存储在表 ...

  10. Android(java)学习笔记56:Android InputMethodManager输入法简介

    参见博客: http://blog.csdn.net/pi9nc/article/details/9196779