前言
本文目录:
- 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()
方法:
详情可以参考链接:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.cv.html?highlight=TEMPLATE#airtest.core.cv.Template
小技巧
局部找图相比于全局找图,可以提高一定的查找效率。
4.指定截图保存的路径和名称
如果是对当前设备的屏幕进行截图,并将截图保存在自定义路径下,可以用下述方式实现:(假设保存在"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
文件夹对应截图的名字改了。所以我们非常不建议用这种方式来修改截图文件的名称。
5.删除指定截图和删除多余截图
Airtest没有提供删除指定截图的API,但是python提供了 remove()
方法,可以帮助我们删除指定路径的截图文件。
os.remove("unity_demo.png")
该方法必须传入的参数是要移除的文件路径。
另外需要注意的是,截图脚本对应的截图文件是不能够随意删除的,除非你不再需要用到某条截图脚本,那对应的截图文件才可以被删掉。
如果误删了截图脚本对应的截图文件,则执行脚本时会报 airtest.aircv.error.FileNotExistError: File not exist:
的错误:
小技巧
很多时候,我们在IDE的脚本编辑窗口中删除了一些截图脚本,但这些截图脚本的截图文件却依旧保存在 .air
的文件夹中,此时我们可以通过IDE自带的 删除多余图片
的功能,帮助我们快速删除这些多余的截图文件:
右键点击脚本名称,选择删除多余图片即可,成功删除后,IDE窗口的右下角会提示:
Airtest官网:http://airtest.netease.com/
Airtest教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b