此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
本文目录:
用代码实现绝对坐标和相对坐标之间的切换,我们需要先获取当前设备的屏幕分辨率:
# 获取设备屏幕分辨率(竖屏)
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 真机以及模拟器设备)
(查看绝对坐标)
(查看相对坐标)
局部截图或者说按坐标截图是大家经常会问到的问题,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)
结果如图:
局部找图的步骤:
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()
方法:
小技巧
局部找图相比于全局找图,可以提高一定的查找效率。
如果是对当前设备的屏幕进行截图,并将截图保存在自定义路径下,可以用下述方式实现:(假设保存在"D:/test/"
目录下,命名为 "首页.png"
)
screen = G.DEVICE.snapshot()
pil_img = cv2_2_pil(screen)
pil_img.save("D:/test/首页.png", quality=99, optimize=True)
而对于 touch
、assert_exists
、wait
之类的截图脚本,默认是保存在 .air
文件夹内,与 .py
文件在一起的:
如果需要修改此类截图脚本中截图文件的名称,我们可以双击对应截图打开 图片编辑器
,然后将 filename
改成自定义的名字即可:
改完之后,.air
文件夹内就会出现你自定义名称的截图副本,原名字的截图文件可以清理掉:
特别注意:如果我们右键切换代码模式,再手动去修改代码中截图文件的名称,实际上并不会自动修改到 .air
文件夹下面对应截图文件的名称。
除非你再手动把 .air
文件夹对应截图的名字改了。所以我们非常不建议用这种方式来修改截图文件的名称。
Airtest 没有提供删除指定截图的 API,但是 python 提供了 remove()
方法,可以帮助我们删除指定路径的截图文件。
os.remove("unity_demo.png")
该方法必须传入的参数是要移除的文件路径。
另外需要注意的是,截图脚本对应的截图文件是不能够随意删除的,除非你不再需要用到某条截图脚本,那对应的截图文件才可以被删掉。
如果误删了截图脚本对应的截图文件,则执行脚本时会报 airtest.aircv.error.FileNotExistError: File not exist:
的错误:
小技巧
很多时候,我们在 IDE 的脚本编辑窗口中删除了一些截图脚本,但这些截图脚本的截图文件却依旧保存在 .air
的文件夹中,此时我们可以通过 IDE 自带的 删除多余图片
的功能,帮助我们快速删除这些多余的截图文件:
右键点击脚本名称,选择删除多余图片即可,成功删除后,IDE 窗口的右下角会提示:
Airtest 官网:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b
关注下方公众号,可以查看更多往期教程,回复 “交流群” 可以加入我们的官方开发者交流群