新手“超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过!

简介: 新手“超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过!

前言



最近在我们的答疑里面,经常遇到这样一类情况:


  • 错把Airtest的API强行用在Poco控件上面
  • 错把Poco的API强加在Airtest的截图脚本上面
  • 不管API的实际用法如何,只按自己的臆想去编写脚本,最终运行脚本时出现各种报错


所以今天我们给大家整理了这几个API用错的常见情况,希望可以让同学们写脚本时少踩一点坑。


容易用错API的情况汇总



1. 混用Airtest和Poco框架的exists()


用错概率超级高的一个方法!!!先上一个错误示范:


网络异常,图片无法展示
|


非常典型的一个把Airtest的API强用在Poco控件上面的情况。这位同学的预期呢,是想要判断下,如果存在这个控件,就进行某些操作。


但是他的问题在于 exists 方法的用法不对。


首先可以明确的是,Airtest和Poco框架都用这个API检测当前页面是否存在某个东西,但不同的是,Airtest的 exists 用于检查当前画面是否存在某个截图目标,用法如下:


网络异常,图片无法展示
|


exists(Template(r"tpl1622704594490.png", record_pos=(-0.185, -0.211), resolution=(810, 1440)))
复制代码


Poco框架的 exists 用于检测当前页面是否存在某个控件,用法如下:


poco(text="poco").exists()
复制代码


所以该同学的正确写法应该是:


if poco(text="poco").exists():
    pass
复制代码


其次还需要注意的是,这俩个API的返回值有一点点不一样:


# 控件存在返回True,不存在返回False
poco(text="poco").exists()
# 图片目标存在返回坐标,不存在返回False
exists(Template(r"tpl1622704594490.png", record_pos=(-0.185, -0.211), resolution=(810, 1440)))
复制代码


Airtest 的 exists 搭配条件语句 if 使用的时候,还需要注意下面这种情况:


网络异常,图片无法展示
|


可以看到,在当前页面并不存在“设置”这个截图目标,但是脚本确确实实运行到了 if 里面,这说明这条 if 是通过的。这是为什么呢?


我们仔细看下log,在脚本运行到 exists 方法的时候,其中1个图像识别算法找到了1个可信度为0.7039xx的结果,大于默认的图像阙值0.7,所以这条 exists 的结果是返回了该结果的坐标,导致 if 语句通过。


这种情况也非常常见,同学们常常会怀疑为什么我写的 if 语句不生效呢?其实不是,解决办法呢,也非常简单,提高该图像的阙值,过滤掉可能会被误判的结果即可:


if exists(Template(r"tpl1622705519946.png", threshold=0.8, record_pos=(0.143, -0.342), resolution=(810, 1440))):
    print("找到了")
复制代码


将阙值提高到0.8,过滤掉那个大于0.7的误判结果,此时的脚本就会符合我们的预期啦:


网络异常,图片无法展示
|


2. 按自己臆想编写脚本


老样子,先看错误示范:


网络异常,图片无法展示
|


这位同学的预期应该是,存在这个控件的话就点击这个控件,但是上面我们讲过,Poco框架的 exists 方法,返回的是 TrueFalse ,布尔值是没有 click 方法的,只有UI控件才有 click 方法。


这种情况就是典型的不按照语法编写脚本,而是按照自己的臆想去编写脚本。那么正确的写法呢,也很简单:


# 分开写就好啦!!!
poco(text="poco").exists()
poco(text="poco").click()
# 或者
if poco(text="poco").exists():
    poco(text="poco").click()
复制代码


类似的情况还有下面这种,该同学的预期应该是等待这个控件出现,然后就点击它:


网络异常,图片无法展示
|


但是这里居然报了个空对象的错误,我们翻一下 wait_for_appearance 的API文档:


网络异常,图片无法展示
|


可以看到, wait_for_appearance 是没有任何返回值的,所以后面不可能跟着 click 方法,正确的写法如下:


# 又是这么简单,分开写即可,其实原因就是这俩方法都是UI控件的方法
poco(text="poco").wait_for_appearance()
poco(text="poco").click()
复制代码


3. 把Poco的API强行用在Airtest的截图脚本上


看下错误示范:


网络异常,图片无法展示
|


其实这位同学的初衷呢,是想要等到某个截图目标出现,但是问题在于, wait_for_appearance() 是UI控件的方法(Poco框架),等待截图出现,需要用Airtest框架的 wait() 方法:


# 等待截图目标出现
wait(imgTemplate(r"tpl1622713460444.png", record_pos=(0.148, -0.346), resolution=(810, 1440)))
# 等待UI控件出现
poco(text="poco").wait_for_appearance()
复制代码


网络异常,图片无法展示
|


小结



今天的API错用情况就分享到这里啦,希望同学们在编写脚本之前,可以多翻一翻Airtest和Poco的API文档,看看里面的API详情和示例脚本,少踩一些坑。

最后附上这两个框架的API文档链接,有需要的同学自取啦:

相关文章
|
文字识别 小程序 测试技术
网易私有云新增的测试驱动力,Airtest-ocr文字识别点击真香!
网易私有云新增的测试驱动力,Airtest-ocr文字识别点击真香!
687 0
|
机器学习/深度学习 人工智能 Java
验证码破解全流程实战
验证码破解全流程实战
776 0
验证码破解全流程实战
|
测试技术 API Android开发
Airtest新手升级:一个相对完整的纯.py脚本是怎样子的
Airtest新手升级:一个相对完整的纯.py脚本是怎样子的
230 0
|
Android开发
autojs最近任务多界面
牙叔教程 简单易懂
841 0
|
开发框架 人工智能 运维
蓝鲸自动化运维平台
蓝鲸自动化运维平台 1.蓝鲸简介 官网:https://bk.tencent.com/docs/ 腾讯蓝鲸智云,简称蓝鲸,是腾讯互动娱乐事业群(Interactive Entertainment Group,简称 IEG)自研自用的一套用于构建企业研发运营一体化体系的 PaaS 开发框架,提供了 aPaaS(DevOps 流水线、运行环境托管、前后台框架)和 iPaaS(持续集成、CMDB、作业平台、容器管理、数据平台、AI 等原子平台)等模块,帮助企业技术人员快速构建基础运营 PaaS。
2760 0
蓝鲸自动化运维平台
|
Ubuntu 编译器 C语言
【Python】已解决:(paddleocr库安装报错) error: subprocess-exited-with-error × Running setup.py install for pyth
【Python】已解决:(paddleocr库安装报错) error: subprocess-exited-with-error × Running setup.py install for pyth
1083 0
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试中AI驱动的决策框架设计与实现
【5月更文挑战第5天】 在软件测试领域,自动化测试已成为提升测试效率和质量的关键手段。然而,随着软件系统的复杂性增加,传统的自动化测试方法面临挑战,尤其在测试用例的生成、执行及结果分析等方面。本文提出一种基于人工智能(AI)的自动化测试决策框架,旨在通过智能化的算法优化测试过程,并提高异常检测的准确率。该框架结合机器学习和深度学习技术,能够自学习历史测试数据,预测高风险变更区域,自动生成针对性强的测试用例,并在测试执行过程中实时调整测试策略。此外,通过自然语言处理(NLP)技术,该框架还能对测试结果进行语义分析,进一步提供更深入的洞察。本研究不仅增强了自动化测试工具的智能性,也为软件质量保证提
|
SQL 关系型数据库 MySQL
MySQL-在线处理大表数据 & 在线修改大表的表结构
MySQL-在线处理大表数据 & 在线修改大表的表结构
507 0
|
数据管理 Go 开发者
Golang深入浅出之-Go语言上下文(context)包:处理取消与超时
【4月更文挑战第25天】Go语言中的`context`包在并发、网络请求和长任务中至关重要,提供取消、截止时间和元数据管理。本文探讨`context`基础,如`Background()`、`TODO()`、`WithCancel()`、`WithDeadline()`和`WithTimeout()`。常见问题包括不当传递、过度使用`Background()`和`TODO()`以及忽略错误处理。通过取消和超时示例,强调正确传递上下文、处理取消错误和设置超时以提高应用健壮性和响应性。正确使用`context`是构建稳定高效Go应用的关键。
351 1
|
应用服务中间件 缓存 nginx
消除单点,一篇搞定 | 架构设计篇
系统架构中,为什么会存在单点?思路比结论重要。
5731 1