使用Airtest最常遇到的几个需求,都帮你们实现好了

简介: 使用Airtest最常遇到的几个需求,都帮你们实现好了

前言



本文目录:


  • 1.绝对坐标和相对坐标的切换
  • 2.局部截图
  • 3.局部找图
  • 4.指定截图保存的路径和名称
  • 5.删除指定截图和删除多余图片


1.绝对坐标和相对坐标的切换



用代码实现绝对坐标和相对坐标之间的切换,我们需要先获取当前设备的屏幕分辨率:


# 获取设备屏幕分辨率(竖屏)
height = G.DEVICE.display_info['height']
width = G.DEVICE.display_info['width']
# 已知绝对坐标[311,1065],转换成相对坐标
x1 = 311/width
y1 = 1065/height
poco.click([x1,y1])
# 已知相对坐标[0.3,0.55],转换成绝对坐标
x2 = 0.3*width
y2 = 0.55*height
touch([x2,y2])
# 如果是横屏设备的话,则分辨率如下
height = G.DEVICE.display_info['width']
width = G.DEVICE.display_info['height']
复制代码


我们还可以用下述方式,判断当前屏幕为横屏还是竖屏,并获取当前屏幕的分辨率:


if G.DEVICE.display_info['orientation'] in [1,3]:
    height = G.DEVICE.display_info['width']
    width = G.DEVICE.display_info['height']
else:
    height = G.DEVICE.display_info['height']
    width = G.DEVICE.display_info['width']
复制代码


小技巧


IDE自带查看当前设备坐标的方法(仅适用于Android、iOS真机以及模拟器设备)



(查看绝对坐标)



(查看相对坐标)


2.局部截图



局部截图或者说按坐标截图是大家经常会问到的问题,Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图:



举个例子,我们想要截取手机屏幕中被红框圈中位置的截图:



我们可以这么实现:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
# crop_image()方法在airtest.aircv中,需要引入
from airtest.aircv import *
auto_setup(__file__)
screen = G.DEVICE.snapshot()
# 局部截图
screen = aircv.crop_image(screen,(0,160,1067,551))
# 保存局部截图到log文件夹中
try_log_screen(screen)
复制代码


结果如图:



3.局部找图



局部找图的步骤:


  • 进行局部截图
  • 定义要查找的目标截图对象
  • 利用 match_in 方法,在局部截图中查找指定的截图对象


from airtest.core.api import *
from airtest.aircv import *
auto_setup(__file__)
screen = G.DEVICE.snapshot() 
# 局部截图
local_screen = aircv.crop_image(screen,(0,949,1067,1500))
# 将我们的目标截图设置为一个Template对象
tempalte = Template(r"png_code/设置.png")
# 在局部截图里面查找指定的图片对象
pos = tempalte.match_in(local_screen)
# 返回找到的图片对象的坐标(该坐标是相对于局部截图的坐标)
print(pos)
# 若要返回目标在整个屏幕中的坐标,则x,y都需要加上局部截图时设置的最小x、y
print(pos[0]+0,pos[1]+949)
复制代码


上述代码中,我们用到了 Template 类和这个类里面的 match_in() 方法:



详情可以参考链接:airtest.readthedocs.io/zh_CN/lates…


小技巧


局部找图相比于全局找图,可以提高一定的查找效率。


4.指定截图保存的路径和名称



如果是对当前设备的屏幕进行截图,并将截图保存在自定义路径下,可以用下述方式实现:(假设保存在"D:/test/" 目录下,命名为 "首页.png"


screen = G.DEVICE.snapshot()  
pil_img = cv2_2_pil(screen)
pil_img.save("D:/test/首页.png", quality=99, optimize=True)
复制代码


而对于 touchassert_existswait 之类的截图脚本,默认是保存在 .air 文件夹内,与 .py 文件在一起的:



如果需要修改此类截图脚本中截图文件的名称,我们可以双击对应截图打开 图片编辑器 ,然后将 filename 改成自定义的名字即可:



改完之后,.air 文件夹内就会出现你自定义名称的截图副本,原名字的截图文件可以清理掉:



特别注意:如果我们右键切换代码模式,再手动去修改代码中截图文件的名称,实际上并不会自动修改到 .air 文件夹下面对应截图文件的名称。 除非你再手动把 .air 文件夹对应截图的名字改了。所以我们非常不建议用这种方式来修改截图文件的名称。


5.删除指定截图和删除多余截图



Airtest没有提供删除指定截图的API,但是python提供了 remove() 方法,可以帮助我们删除指定路径的截图文件。


os.remove("unity_demo.png")
复制代码


该方法必须传入的参数是要移除的文件路径。


另外需要注意的是,截图脚本对应的截图文件是不能够随意删除的,除非你不再需要用到某条截图脚本,那对应的截图文件才可以被删掉。



如果误删了截图脚本对应的截图文件,则执行脚本时会报 airtest.aircv.error.FileNotExistError: File not exist: 的错误:



小技巧


很多时候,我们在IDE的脚本编辑窗口中删除了一些截图脚本,但这些截图脚本的截图文件却依旧保存在 .air 的文件夹中,此时我们可以通过IDE自带的 删除多余图片 的功能,帮助我们快速删除这些多余的截图文件:



右键点击脚本名称,选择删除多余图片即可,成功删除后,IDE窗口的右下角会提示:


相关文章
|
7月前
|
API
Airtest的多图查找与两图对比
Airtest的多图查找与两图对比
188 0
|
7月前
|
机器学习/深度学习 数据挖掘 PyTorch
10个非常有用的Python库,你知道几个?
这些库覆盖了数据科学、机器学习、Web开发和其他领域,使Python成为一个多用途的编程语言。它们在各种项目和领域中都非常有用。
95 2
|
7月前
|
数据采集 自然语言处理 监控
分享53个杂七杂八的Python源代码总有一个是你想要的
分享53个杂七杂八的Python源代码总有一个是你想要的
91 1
|
7月前
|
数据采集 机器学习/深度学习 自然语言处理
分享44个PyQt5源码总有一个是你想要的
分享44个PyQt5源码总有一个是你想要的
236 0
|
小程序 Python
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
252 0
Tkinter模块GUI界面化编程实战(四)——随机点名小程序(含详解及完整源码、完整程序下载链接)
|
JSON API 数据格式
如何用最最最简单的方式理解一个FastAPI程序?
如何用最最最简单的方式理解一个FastAPI程序?
492 1
如何用最最最简单的方式理解一个FastAPI程序?
|
IDE 测试技术 开发工具
答疑 | 使用Airtest最常问的8大问题
答疑 | 使用Airtest最常问的8大问题
319 0
|
Web App开发 IDE 测试技术
聊一聊使用airtest-selenium做Web自动化的常见问题
聊一聊使用airtest-selenium做Web自动化的常见问题
1452 0
|
IDE 测试技术 API
1篇文章带你了解poco的所有基本功能
1篇文章带你了解poco的所有基本功能
1479 0
FastAPI 学习之路(四十一)如何打断点调试我们的程序
FastAPI 学习之路(四十一)如何打断点调试我们的程序
FastAPI 学习之路(四十一)如何打断点调试我们的程序

热门文章

最新文章