airtest自动化测试教程 airtest图片识别原理( 二 )


此时我们可以考虑将截图范围扩大到红色虚线框选的区域,截图后将这张方形图片视为一个九宫格,
方框上的每一个暗色红点都代表一个数字,将希望被点击的位置设置为target_pos的值即可 。
在这个例子中,我们可以让截图区域的底部正好放在“升级”按钮上,然后设置target_pos=8即可正好点击到该按钮 。
target_pos取值范围是1~9,[1, 9],且必须为整数,默认值是5(图像正中心)


切换彩色与灰度识别rgb(布尔值):
在识别图像时,Airtest会先将图像转为灰度图再进行识别 。
因此假如有两个按钮,形状内容相同,只有颜色不同的情况下,Airtest将认为它们都是相同内容 。
通过勾选rgb选项,或在代码中加入rgb=True,可以强制指定使用彩色图像进行识别


1.2.2 脚本全局设置


默认全局属性:
RESIZE_METHOD = staticmethod(cocos_min_strategy)
THRESHOLD = 0.7 # [0, 1]
THRESHOLD_STRICT = 0.7 # [0, 1]
OPDELAY = 0.1
FIND_TIMEOUT = 20
FIND_TIMEOUT_TMP = 3
PROJECT_ROOT = os.environ.get("PROJECT_ROOT", "") # for using other script


全局属性设置方法:
from airtest.core.api import *
# airtest.core.api中包含了一个名为ST的变量,即为全局设置
ST.THRESHOLD = 0.8


# 未指定图片threshold,默认使用ST.THRESHOLD中的0.8
touch(Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264)))


# 手工指定图片threshold,以图片设置的0.6为准
touch(Template(r"tpl1532588127987.png", record_pos=(0.779, 0.382), resolution=(407, 264), threshold=0.6))


属性值介绍:


1. RESIZE_METHOD
默认的分辨率适配规则(使用的是Cocos引擎的默认缩放规则)
from airtest.core.api import *
def custom_resize_method(w, h, sch_resolution, src_resolution):
return int(w), int(h)
# 替换默认的RESIZE_METHOD
ST.RESIZE_METHOD = custom_resize_method
上面的代码指定了一个自定义的缩放规则:直接return原来的值,不管屏幕分辨率,
所有UI都不进行缩放(有的游戏就是这种策略) 。


2. THRESHOLD
THRESHOLD在上文中已经提到过,是图像识别的阈值,
除了能够设置单张图片的识别THRESHOLD值以外,还可以设置全局的THRESHOLD,让每一张图片都默认生效 。
而设置中还有一个THRESHOLD_STRICT,这是一个更加严格的阈值设定,只用于assert_exists(图片)接口


3. OPDELAY
在我们的脚本中,每一个步骤的操作之间都会有一小段时间间隔,默认用OPDELAY进行设定 。
OPDELAY默认值为0.1,即每一步操作后等待0.1秒,将它适当设置得大一些,可以在每次操作后停顿一小段时间,避免过快进行下一个操作导致不能成功的问题,但最好使用wait或者sleep在操作前增加等待




4. FIND_TIMEOUT
在每次进行图像查找时,如果一次查找不成功,将会再次进行截图-查找的循环,
直到超时才会停下来,超时时长为FIND_TIMEOUT,默认20秒 。
还提供了一个FIND_TIMEOUT_TMP,默认只有3秒 。在不同的截图接口中分别使用了这2个值:
使用了FIND_TIMEOUT作为图片查找超时时长的接口为:
touch
double_click
swipe(swipe支持从第一张图片滑动到第二张图片,此处只有第一张图片使用了FIND_TIMEOU)
wait(wait支持直接传入一个timeout参数,若没有指定timeout,默认使用FIND_TIMEOUT作为超时时长)
assert_exists
在另外一些对查找图片的要求较低的接口中,使用了时长较短的FIND_TIMEOUT_TMP:
swipe(如果第二个参数传入了图片,那么它将使用较短的查找时间)
exists
assert_not_exists


推荐阅读