解放双手,Airtest使用指南
前言
在如今生活中,有许多繁琐而又简单的事情浪费着我们有限的精力。例如手机各类应用的签到一样,拼夕夕 淘宝的签到领取现金;有道云笔记签到领取空间;甚至连领克app都有签到系统.......
这些签到奖励对于羊毛党和强迫症来说,那可真是要了老命了。每日都会打断我的思路,生怕哪个应用忘记又签到导致奖励没了。长久以往,我终于决定做一个脚本软件,每日只需要执行一次,就可自动帮我把所有的应用给签到完毕,既节省了我们签到的点击动作,又避免了遗漏应用签到,省心省力。
对于咱们来说,最简单的实现这个需求就完事了,我就上网搜了下自动化脚本工具,没想到第一个就让我觉得值得一试。这就是今天我们主要说明的主角-Airtest!
简介
Airtest是由网易游戏推出一个跨平台的、 基于图像识别 的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS。如果就只需要图像识别的话,我们就直接安装他的ide就好了,里面已经自带了相关环境,能够支持大部分基础操作。
下载
安装环境:
Windows Microsoft Windows 7/8/10 (64bit / 32bit) Python 2.7 或更高
macOS macOS 10.12.1 或更高 Python 2.7 或更高
Ubuntu Ubuntu 16.04 64bit Python 2.7 或更高
注意,Ubuntu只支持16.04,而且还容易出现一些异常问题,如果想在Ubuntu开发可能需要用其他python工具进行调试。
如果满足条件的话,那么可以下载页(airtest.netease.com/changelog.h…),下载安装到指定目录就可以进行相关的开发操作了。
AirtestIDE使用
打开应用,迎面展示的是这样的页面:
由于都是中文的选项,比较易懂,我就简单讲解下相关步骤(Android设备):
- 手机插入usb,并且开启调试模式并且授权当前电脑调试
- 点击右方刷新ADB,这时候Android设备就有当前连接的手机
3.点击 connect,使连接当前设备,这时候右侧就会变成当前手机界面。可以通过鼠标模拟手指进行相关操作
4.录制脚本,Airtest自动化分为两部分(以下命名按照自己理解进行定义,如有错误麻烦指正):
- 图形化脚本,就在左侧上方的Airtest辅助窗,这里是通过图片识别进行对应判断。
- 对应API介绍文档链接:Airtest介绍 - Airtest Project Docs (netease.com)
- 如果嫌麻烦的同学可以直接点击 F6 或者
按钮进行录制,在右侧窗进行对应的操作,IDE就会自动生成相关步骤代码。(不智能,不推荐)
- 层级判断脚本,相较于图形化可以减少截图判断等操作,但是支持较少,像cocos游戏引擎等需要接入相关SDK才能拿到层级
- 对应介绍链接:Poco介绍 - Airtest Project Docs (netease.com)
- 如文档所说,除了IOS和Android原生可以拿到层级,其他的都需要接入SDK,需要根据当前条件判断是否使用
pythoncharm使用Airtest
1. 安装Airtest相关依赖
# 安装Airtest框架
pip install airtest
# 安装Poco框架;编写了Poco语句就需要安装
pip install pocoui
# 安装airtest-selenium框架;编写了airtest-selenium语句就需要安装
pip install airtest-selenium
注意:高版本 Ubuntu 可能缺失了distutils导致报错:
ModuleNotFoundError: No module named 'distutils.core'
解决方案:
# 查看当前的python版本
python3 --version
#安装对应版本distutils,这里是 Python 3.7.8 的版本号
sudo apt install python3.7-distutils
2.pythoncharm导入相关依赖
tips:如果对python不太熟悉,本身有下载AirtestIDE的,可以通过点击 文件-> 新建脚本-> .py纯python -> 选择对应python文件,这时候IDE会覆盖那个文件代码。
以下是我简易实现了一个自动签到的脚本:
效果图
代码:
# -*- encoding=utf8 -*-
__author__ = "user"
# 初始化环境
from airtest.core.api import *
from airtest.cli.parser import cli_setup
auto_setup(__file__)
# Android poco的初始化脚本
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
if not cli_setup():
auto_setup(__file__, logdir=True, devices=[
"Android:///?cap_method=javacap&ori_method=adbori",
])
start_app("com.lynkco.customer")
sleep(5)
# 控件点击操作
poco("com.lynkco.customer:id/ly_tab_my").click()
sleep(2)
poco("com.lynkco.customer:id/signIn").click()
sleep(2)
stop_app("com.lynkco.customer")
start_app("com.max.xiaoheihe")
sleep(5)
poco("com.max.xiaoheihe:id/rb_1").click()
sleep(2)
poco("com.max.xiaoheihe:id/rb_1").click()
sleep(2)
stop_app("com.max.xiaoheihe")
start_app("com.taobao.taobao")
sleep(5)
poco("android.widget.FrameLayout").child("android.widget.LinearLayout").offspring("android:id/tabhost").offspring("我的淘宝").child("android.widget.ImageView").click()
sleep(2)
poco("android.widget.FrameLayout").child("android.widget.LinearLayout").offspring("com.taobao.taobao:id/recycler_view").child("android.widget.FrameLayout")[5].offspring("android.support.v7.widget.RecyclerView").child("android.widget.FrameLayout")[1].child("android.widget.ImageView")[0].click()
sleep(2)
stop_app("com.taobao.taobao")
相关文献参考
转载自:https://juejin.cn/post/7350601840399253554