Airtest 基于图像识别的操作(1)

  这节内容主要介绍,基于图像识别的操作,主要分三部分,基础操作、设备相关操作、滑动下拉选项的操作技巧;
  基础操作
  这部分操作就是常见的单击、双击、输入内容、滑动等;
  touch(v,times=1,**kwargs):点击;选择这个组件后,直接操作鼠标截取要操作的目标对象,它会生成一个图片保存在本地,这个图片不能删除了,否则运行时就找不到要操作的对象。常见参数如下:

v图片实例 或 绝对坐标(x,y),截图后就不用再设置了,如果使用绝对坐标要考虑设备兼容性问题;
times点击次数,默认1次;如果双击就是2次;
threshold识别阈值,0~1,双击图片可以修改阈值,就是调整图片比对时的相似度,值越大,对图片的相似度要求就越严格,可以避免误操作。我就遇到过,页面中有雷同的操作对象,我将值提高到0.9就避免了误操作,但是,这个值不是越大越好,因为消耗性能,根据实际情况来。
duration点击持续时间;
rgb开启彩色识别;一般不需要动;
touch(Template(r"tpl1606730579419.png"),duration=2) 

  click(v,times=1,**kwargs):与 touch 类似;

  double_click(v):双击,常用参数同上;

  home():返回 HOME 界面;

  swipe(v1,v2=None,vector=None,**kwargs):滑动操作;常见参数如下:

v1滑动起点,图片实例 或 绝对坐标;
v2滑动终点,可以为空,就是沿着一个方向滑动;
vector滑动动作的矢量坐标,可以是绝对坐标,或屏幕百分比,例如:(0.5,0.5);我一般用百分比;
duration滑动持续时间;
steps滑动需要几步到达终点,根据实际情况决定是否使用;
swipe((100, 100), (200, 200)) # 从 v1 滑动到 v2。
swipe(Template(r"tpl1606814865574.png"), vector=[-0.0316, -0.3311])   # 从 v1 开始滑动,沿着vector方向。

  注意:swipe最终返回一个原点位置、目标位置;
  text(text,enter=True,**kwargs):输入文本,注意:文本框需要处于激活状态,例如:先touch、click,再text;常见参数如下:

text要输入的文本,其他数据类型要转成字符串;
enter输入完毕是否回车,即执行一次Enter,默认True;
search是否对输入内容进行搜索,常用于搜索框,前提要支持;

  有些手机无法输入时,使用 adb shell input 进行:shell(“input text ‘xxxxx’”)

text("test")
text("test", enter=False)
text("test", search=True)  //在Android上,有时你需要在输入完毕后点击搜索按钮:

  注意踩坑:如果搜索框没有搜索按钮,又回车失败,通过 keyevent 输入 ENTER 键依然无法搜索,可能是 text 接口回车失败,解决办法:先获取焦点,再输入,最后设置键盘;

poco(name="com.xxx.mm:id/t8")[0].sibling(name="android.widget.FrameLayout")[0].offspring(name="android.view.View")[0].child().click()
text("xxxxxx")
ime=G.DEVICE.yosemite_ime
ime.code(6)

  sleep(secs=1.0):等待;类似于暂停;

  wait(v,timeout=None,interval=0.5,intervalfunc=None):等待当前页面出现待操作的图片;常见参数如下:

v目标图片实例;
timeout最大等待时长,超过时间仍然没有目标图片,报错;
interval间隔周期,每次匹配目标图片的间隔周期;
intervalfunc匹配失败后的回调函数;
wait(Template(r"tpl1606821804906.png")) 
wait(Template(r"tpl1606821804906.png"), timeout=120, interval=3)
//查找失败,调用回调函数
def notfound():
     print("No target found")
wait(Template(r"tpl1607510661400.png"), intervalfunc=notfound)

  right_click():右击鼠标;先获取当前连接的窗口,再调用该方法;

from airtest.core.api import *
auto_setup(__file__)
# 获取当前连接的窗口
dev = device()
# 拿到鼠标,并模拟鼠标的右键点击操作
dev.mouse.right_click(coords=(1920,100))

  snapshot(filename=None,msg=“”,quality=None,max_size=None):截图,并保存到文件中;常见参数如下:

filename保存截图的文件名,默认的保存路径为"ST.LOG_DIR"中;
msg截图文件的简短描述,将会被显示在报告页面中;
quality图片质量,[1,99]的整数,默认是10;
max_size图片的最大尺寸;
snapshot(filename="test.png", msg="test")
snapshot(filename="test2.png", msg="test", quality=90, max_size=1200)

  注意:图片质量、图片尺寸也可以通过全局配置设置,这里只对当前生效;
  crop_image(img,rect):局部截图;常见参数如下:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from airtest.aircv import *   # crop_image()方法在airtest.aircv中,需要引入

auto_setup(__file__)
screen = G.DEVICE.snapshot()

screen = aircv.crop_image(screen,(0,160,1067,551))  # 局部截图

try_log_screen(screen)  # 保存局部截图到log文件夹中

  exists(v):判断目标是否存在;常用来判断对象存在时执行下一步操作;目标不存在返回 False,找到就返回坐标;这个也经常使用;

if exists(Template(r"tpl1606822430589.png")):
    touch(Template(r"tpl1606822430589.png"))
//因为 exists() 会返回坐标,我们可以直接点击坐标来减少一次图像查找
pos = exists(Template(r"tpl1606822430589.png"))
if pos:
    touch(pos)

  find_all(v):当前屏幕上查找所有出现的目标,并返回一个坐标列表;不常用;

>>> find_all(Template(r"tpl1607511235111.png"))
[{'result': (218, 468), 'rectangle': ((149, 440), (149, 496), (288, 496), (288, 440)),'confidence': 0.9999996423721313}]

  log(arg,timestamp=None,desc=“”,snapshot=False):插入日志,显示在HTML报告中;常见参数如下:

arg日志信息
timestamp时间戳
desc描述信息
snapshot是否截图,默认Fasle
log("hello world", snapshot=True)
log({"key": "value"}, timestamp=time.time(), desc="log dict")
try:
    1/0
except Exception as e:
    log(e)

  今天介绍的都是常用的基础操作,还有一些设备相关内容、自定义滑动、删除等放在下篇内容中,敬请期待!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值