阅读文本大概需要 5 分钟。
很多读者看过之前的文章,发现我使用最多的是一款 Airtest 的自动化测试框架。

Airtest 是一款适合于游戏和 App 的 UI 自动化测试框架。
下面对 Airtest 在平时自动化和爬虫过程中的常见问题做一个汇总。
1、优势

Airtest 上手难易度低,高效方便,结合 Python 脚本,可以完成一些自动化的操作,也可以快速开发出一款 App 端的爬虫。
2、AirtestIDE 还是 Pycharm
如果只是简单的一些操作,可以使用官网提供的 AirtestIDE,通过简单的拖拽、按压、点击就能完成脚本录制和回放操作。


当然,想完成一些复杂的操作,就需要在 Python 虚拟环境下安装 pocoui 依赖库,然后借助 Pycharm 编写 Python 脚本来完成。
3、Airtest 结合 Python 操作

只需要在 Python 虚拟环境下安装 pocoui 依赖库。


pip3 install pocoui

4、有线连接和无线连接
利用 Airtest 驱动手机完成自动化操作,有两种方式:有线连接、无线连接。
有线连接:手机通过数据线连接 PC,确保使用 adb devices 命令能找到设备。

然后,通过下面的 Python 代码即可以完成连接操作。


# 通过有线连接 PC 端和手机
self.poco = AndroidUiautomationPoco(screenshot_each_action=False)
auto_setup(__file__)

无线连接:保证手机和 PC 在同一个网段,使用 adb 启动手机端的 adb 端口,然后使用下面的 Python 代码完成连接操作。


# 通过 adb 命令开启手机端的 adb 端口
adb tcpip 6666

# 通过 Python,无线连接 PC 和手机
device = connect_device('android:///192.168.1.166:6666?cap_method=javacap&touch_method=adb')

poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)

auto_setup(__file__)
5、常用操作
只需要通过 Android SDK 中的 Monitor 工具识别到元素 ID 或者文本,然后借助 Poco 依赖库完成常见的操作。

常用手势操作包含:点击、长按、滑动。


# 点击1
poco(元素ID).click()

# 点击2
poco(text=u'元素文本内容').click()

# 长按
poco(元素ID或者元素文本).long_click(长按的时长)

# 滑动到下一页
poco.swipe([起始坐标x轴, 起始坐标y轴], [终点坐标x轴, 终点坐标y轴], duration=滑动时长)

poco.swipe([0.5, 0.8], [0.5, 0.3], duration=1)

# 滑动到上一页
poco.swipe([0.5, 0.3], [0.5, 0.8], duration=1)

pocoui 已经封装了页面的常用操作,包含:回到桌面、模拟手机返回键、锁屏键、截屏、卸载、打开应用等操作。


# pocoui 封装的一些方法

# 打开应用
def start_app(package, activity=None):

# 停止应用
def stop_app(package):

# 截屏
def snapshot(filename=None, msg=""):

# 回到桌面
def home():

# 模拟按键操作
# 模拟页面返回操作
keyevent('BACK')
6、异常处理
由于 Airtest 是一款 UI 测试框架,对可见的元素能通过元素 ID 或者文本内容拿到元素,处理列表的时候,滑动的时候经常会导致元素异常,这里要做好异常处理。


# 处理列表元素
try:
     self.__handle_good_list()
except:
     pass
7、元素获取不到
借助 Android SDK 中的 Monitor 查看元素属性,会发现有些元素没有 ID 和文本,这时候可以查看 UI 树的结构,找到一个可以确定的元素,通过父子关系拿到这个元素。
8、点击无效
有的时候,通过 pocoui 拿到元素对象,但是点击没有效果。

这种情况,可以通过反复点击,直达某个元素出现来解决这个问题。

# 点击搜索按钮
while True:
     # 等待检索结果列表出现
     if not self.poco(元素ID).exists():
          # 再次点击
          perform_click(self.poco(元素ID, text='搜索'))
     else:
          break
THANDKS
- End -

- To Be Continued -


欢迎关注公众号:测试开发社区
微信扫描二维码,关注我的公众号

聊聊 Airtest 自动化工具的更多相关文章

  1. Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候,当时,看了一下官方的文档,大概是类似Sikuli的一个工具,主要用来做游戏自动化的,通过截图的方式用来解决游戏自动化测试的难题.最近,移动端测试的同事尝试用 ...

  2. 强大的 Python 任务自动化工具!invoke 十分钟入门指南

    接着前面的<tox 教程>,以及刚翻译好的<nox文档>,我们继续聊聊 Python 任务自动化的话题. nox 的作者在去年的 Pycon US 上,做了一场题为<Br ...

  3. Airtest自动化测试工具介绍

    官方网站:http://airtest.netease.com/ Airtest IDE: 跨平台的UI自动化测试编辑器,适用于游戏和App,详细参见官网文档:http://airtest.netea ...

  4. web自动化工具-开篇

    web自动化工具-开篇 最近几年,前端技术风一样的速度迭代更新,各种框架工具雨后春笋般涌现,作为一个平凡的开发者,也只能在洪流中沉沉浮浮,微不足道,以前前端叫做切图仔.美工,如今改了称号叫前端工程师, ...

  5. web自动化工具-liveStyle

    web自动化工具-liveStyle LiveStyle. The first bi-directional real-time edit tool for CSS, LESS and SCSS主要用 ...

  6. web自动化工具-livereload

    web自动化工具-livereload livereload是一个很神奇的工具,主要解放了F5键,监听文件变动,整个页面自动刷新.可搭载gulp等构建工具使用.和liveStyle 针对样式文件相比, ...

  7. web自动化工具-Browsersync

    web自动化工具-Browsersync browser-sync才是神器中的神器,和livereload一样支持监听所有文件.可是和livereload简单粗暴的F5刷新相比,browsersync ...

  8. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  9. 学习安装并配置前端自动化工具Gulp

    Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...

随机推荐

  1. iOS开发-消息初认识

    一.消息循环(runLoop)的作用 1,防止程序退出, 2,接受事件 3,如果没有事件,让程序自动休眠   二.消息源    1, 输入源:键盘.鼠标.NSBoard.NSPort    2,定时源 ...

  2. Spring4.3.25版本使用的积累性总结(不定期更新)

    Spring4.3.25版本使用的积累性总结 Spring4.x所有Maven依赖 Spring基于XML配置方式注入bean对象和@Resource注解的使用 详解Spring3.x 升级至 Spr ...

  3. Kattis - intersectingrectangles 扫描线+线段树

    题目:https://open.kattis.com/problems/intersectingrectangles 题意::给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角的坐标,然后问你 ...

  4. Debian8.8为普通用户添加sudo权限

    1.进入root用户,su root 输入密码,我们首先修改 /etc/sudoers 文件的属性为可写权限# chmod +w /etc/sudoers2.编辑 vim /etc/sudoers,添 ...

  5. Codeforces 1288B - Yet Another Meme Problem

    题目大意: 令conc(a,b)函数得出的结果为将ab拼接得到的数字. 例如:conc(12,23)=1223 a和b不会包括前导0! 接下来,你已知A和B,问有多少对的(a,b)满足 1≤a≤A , ...

  6. [CTS2019]氪金手游(容斥+树形背包DP)

    降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的“好”成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是每个点先父亲再自己. ...

  7. Jmeter连接Mysql出现Cannot create PoolableConnectionFactory (Could not create connection to database server.)错误

    0 环境 系统环境:win10 1 正文 一般是数据库的驱动包版本不匹配(我是直接放在jmeter/lib下的) 当然有时候需要添加?useUnicode=true&characterEnco ...

  8. 线程中start与run方法的主要区别

    区别一:                在于当程序调用start方法一个新线程将会被创建,并且在run方法中的代码将会在新线程上运行,                然而在你直接调用run方法的时候, ...

  9. Resin介绍及其使用配置

    Resin介绍及其使用配置一 Resin是一个提供高性能的,支持 Java/PHP 的应用服务器.目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者.开发人员和低流量网站使用:一种是收费的专业 ...

  10. jsp页面之间传中文参数显示乱码问题的解决

    最近在项目中遇到jsp页面通过url传递参数,出现乱码,但是在本地是正常显示,在服务器上却是乱码,找了好久都没找到解决方法,最终在大神的帮助下解决了这个问题 比如从a.jsp像b.jsp页面传递参数 ...