当前位置: 首页 > news >正文

AirtestIDE用法

包括airtest和poco

1. airtest

安装python3.7.9 64

python3 -m pip install -U airtest

或者:

git clone https://github.com/AirtestProject/Airtest.git
pip install -e airtest

无界面的airtest用法:

打开手机中的 开发者选项 , 以及 允许USB调试

adb devices命令看到设备

在代码和命令行中,使用手机序列号连接手机

执行测试:

D:\Python37\python.exe -m airtest run "D:\ljx\light_lmt\autoTest\autoRun.py.air" --device "android://127.0.0.1:5037/320716742833?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH" --log "D:\ljx\light_lmt\autoTest\log"

生成报告:

D:\Python37\python.exe "D:\ljx\light_lmt\AirtestIDE-win-1.2.17\AirtestIDE\sample\report_launcher.py" "D:\ljx\light_lmt\autoTest\autoRun.py.air" --log_root "D:\ljx\light_lmt\autoTest\log" --outfile "D:\ljx\light_lmt\autoTest\log\log.html" --static_root "D:\ljx\light_lmt\AirtestIDE-win-1.2.17\AirtestIDE\airtest\report" --lang zh --plugin "poco.utils.airtest.report"

在代码中使用手机:

python -m airtest run untitled.air --device Android:///手机序列号 --log log/
Android://<adbhost>:<adbport>/<serialno>
  • adbhost是adb server所在主机的ip,默认是本机,也就是localhost127.0.0.1

  • adb port默认是5037

  • serialno是android手机的序列号,例如刚才的c2b1c2a7

# 什么都不填写,会默认取当前连接中的第一台手机
Android:///
# 连接本机默认端口连的一台设备号为c2b1c2a7的手机
Android://127.0.0.1:5037/c2b1c2a7
# 用本机的adb连接一台adb connect过的远程设备,注意10.254.60.1:5555其实是serialno
Android://127.0.0.1:5037/10.254.60.1:5555

当我们使用命令行运行脚本时,可以使用--device Android:///来为它指定脚本运行的Android设备

airtest run untitled.air --device Android:///手机序列号 --log log/

Android手机支持在运行脚本过程中对屏幕进行录制,在运行脚本的命令行中加入--recording参数即可:

airtest run "Airtest_example.air"  --device android:/// --log logs/ --recording

运行完毕后,可以在指定的log目录中找到录制完毕的mp4文件。

当我们想在代码里连接手机时,可以使用connect_device接口

from airtest.core.api import *
connect_device("Android:///手机序列号")

可以额外添加cap_method=JAVACAP的参数来强制指定屏幕截图方式为JAVACAP

# 连接了模拟器,勾选了`Use javacap`模式
Android://127.0.0.1:5037/127.0.0.1:7555?cap_method=JAVACAP

无法连接可以尝试参数:

我们还有另外两个参数,分别是用于指定设备画面旋转模式的ori_method=ADBORI,以及指定点击画面方式为ADB指令点击的touch_method=ADBTOUCH

# 所有的选项都勾选上之后连接的设备,用&&来连接多个参数字符串
# --device Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI 在windows下不可用
--device Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP^&^&ori_method=ADBORI  # windows命令行添加^转义后效果
--device Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP\&\&ori_method=ADBORI  # mac命令行添加\转义

Android接口调用

所有在airtest.core.api中定义的接口,都可以在Android平台上使用,直接在脚本中调用即可:

from airtest.core.api import *
touch((100, 200))
# 启动某个应用
start_app("org.cocos2d.blackjack")
# 传入某个按键响应
keyevent("BACK")

可以查阅airtest.core.api文档获得API列表。

除了在airtest.core.api中提供的跨平台接口之外,Android设备对象还有很多内置的接口可以调用,我们可以在airtest.core.android.android module这个文档中查阅到Android设备对象拥有的方法,然后像这样调用:

dev = device()  # 获取到当前设备的Android对象
print(dev.get_display_info())  # 查看当前设备的显示信息
print(dev.list_app())  # 打印出当前安装的app列表

ADB指令调用

利用Android设备接口,我们可以这样调用adb指令:

# 对当前设备执行指令 adb shell ls
print(shell("ls"))# 对特定设备执行adb指令
dev = connect_device("Android:///device1")
dev.shell("ls")# 切换到某台设备,执行adb指令
set_current(0)
shell("ls")

Airtest之python本地环境安装、独立IDE运行

下载AirtestIDE

安装与启动 - Airtest Project Docs

 Airtest Project

2.2 Android连接常见问题 - Airtest Project Docs

Airtest自动化测试——Airtest进阶和图像识别算法(上)_截图_的图片_按钮

用airTestIDE 自带的adb配置到环境变量

D:\ljx\light_lmt\AirtestIDE-win-1.2.17\AirtestIDE\airtest\core\android\static\adb\windows

python可以配置成自己安装的3.7

1.2.1 脚本代码修改属性

假如直接使用文本编辑器打开我们所编辑的Airtest脚本目录里的同名py文件,可以看到,每张图片都由类似这样的语句组成:

Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264))

直接在里面加入需要修改的值即可

Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264), threshold=0.6, target_pos=5, rgb=False)

图像识别阈值threshold(浮点类型):

threshold是用来判定一张图片识别是否成功的阈值,例如一张图片识别到的匹配度是0.65,

而我们设置的threshold为0.7的话,Airtest会认为匹配失败,从而进行下一次匹配。

通常来说,threshold设置得越高,图像识别的精度越高,但成功率也会有所降低,请根据自己的实际情况酌情设置。

取值范围为0~1之间,[0, 1],默认值是0.7。

图像点击位置target_pos(整型):

当识别出一张图像后,Airtest将会默认去点击图像的正中心位置,

有时我们希望它识别出图片后点击其他位置,可以通过修改target_pos属性来实现

在上图中,我们希望点击中间选项的“升级”按钮,不希望点到别的选项去,而只截出升级按钮不能满足我们的需求。

此时我们可以考虑将截图范围扩大到红色虚线框选的区域,截图后将这张方形图片视为一个九宫格,

方框上的每一个暗色红点都代表一个数字,将希望被点击的位置设置为target_pos的值即可。

在这个例子中,我们可以让截图区域的底部正好放在“升级”按钮上,然后设置target_pos=8即可正好点击到该按钮。

target_pos取值范围是1~9,[1, 9],且必须为整数,默认值是5(图像正中心)

切换彩色与灰度识别rgb(布尔值):

在识别图像时,Airtest会先将图像转为灰度图再进行识别。

因此假如有两个按钮,形状内容相同,只有颜色不同的情况下,Airtest将认为它们都是相同内容。

通过勾选rgb选项,或在代码中加入rgb=True,可以强制指定使用彩色图像进行识别

1.4 输入文字

在脚本中,如果想要实现文字输入,一般需要这样的流程:

1. 点一下你需要输入的位置,激活输入光标

2. 调用airtest的 text() 接口来输入内容

如图,在这个脚本里 先点击了需要输入的位置 ,然后调用了text接口进行输入,在运行时手机将会自动被安装一个名为 yosemite.apk 的应用,然后启用 yosemite输入法来进行输入。

而且需要注意的是,在使用过text接口后,手机输入法会被切换为yosemite输入法,因此看不到正常键盘了(无需惊慌)。如果需要手工输入,可以在系统的输入法设置中,把输入法切换回系统输入法即可恢复。同时我们也提供了 安卓手机助手功能 ,在手机助手中可以简单地点击鼠标来切换输入法。

3、坐标介绍
Airtest框架-绝对坐标

Airtest是基于图片识别的框架,讲究所见即所得,所以其坐标都是使用的屏幕绝对坐标,如:touch([500,500])、swipe([100,100],[500,500]) 假如手机屏幕就是1000*1000,[500,500]就是屏幕的中心点,这就是屏幕的绝对坐标;

poco框架-相对坐标

假如图中左右是两个手机屏幕,一个是100*100,一个是200*200。小手机左上有个按钮,其中心点绝对坐标是[25,25],那么这个点相对于整个屏幕百分比大小就是[25/100,25/100]=[0.25,0.25];同理,大手机左上按钮的中心点绝对坐标是[50,50],那么这个点相对于整个屏幕百分比大小就是[50/200,50/200]=[0.25,0.25];

所以同一APP运行在这2个手机上,我们想利用坐标点击左上的按钮,如果用Airtest框架就要分别写成:touch([25,25]) 和 touch([50,50])而如果是用Poco框架,则只要写成poco.click([0.25,0.25])即可通用;


http://www.mrgr.cn/news/94879.html

相关文章:

  • 大数据学习(69)-数据架构
  • 蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)
  • LeetCode Hot 100:1.两数之和、49.字母异位词分组、128.最长连续序列、283.移动零、11.盛水最多的容器
  • 11.anaconda中的jupyter使用、及整合dataspell
  • 【华为OD-E卷 -122 字符统计及重排 100分(python、java、c++、js、c)】
  • 微服务》》Kubernetes (K8S)安装
  • 【蓝桥杯每日一题】3.16
  • 使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题
  • hubilder打包ios app, 并上传TestFlight
  • 用uv管理python环境/项目(各种应用场景)
  • WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)深度解析与实战复现
  • PosterRender 实现微信下程序 分享商品生成海报
  • [蓝桥杯 2023 省 B] 飞机降落
  • 算法刷题记录——LeetCode篇(8) [第701~800题](持续更新)
  • 本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)
  • 【深度学习|目标检测】YOLO系列anchor-based原理详解
  • 卷积神经网络 - 一维卷积、二维卷积
  • 使用htool工具导出和导入Excel表
  • 做游戏的发展方向
  • GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)