Airtest:Windows桌面应用自动化测试三【Airtest脚本的点击位置与点击偏移】

news2024/12/27 0:32:36

Airtest脚本的点击位置与点击偏移

  • 1. 前言
  • 2. Airtest的点击位置
  • 3.Airtest的点击偏移
    • 图像点击偏移,常用于下述场景中:
      • 3.1、一个是,当我们的页面中,存在很多个相同的图标,我们想指定点击某个位置的图标,就有可能用到 target_pos 的参数,举个例子,在下述的页面中,有3个相同的播放按钮:
      • 3.2、另外一个常用的场景是,当我们的点击图片特征点太少时,可以适当增加截图范围,然后通过设置 target_pos ,来点到我们的目标位置。
  • 4. 拓展:Airtest的其它点击参数

1. 前言

经常会提到:这个图片脚本怎么没有点击效果?为什么脚本会点偏了?我想点图片的其它位置可以吗?诸如此类的问题。

今天就来跟同学们详细聊一聊,Airtest的点击位置与点击偏移这块内容,看完之后,遇到类似上面的问题,我们都可以迎刃而解啦。

2. Airtest的点击位置

用一个最简单的图像点击脚本来作为示例:
在这里插入图片描述
执行这条图像脚本,会点在哪个位置呢?熟悉Airtest的同学都会知道,是图片的中心位置。那我们如何哪些地方知道这条脚本实际的点击效果呢?教大家几个小技巧。

一个是在手机的设置里面打开“显示触摸操作”,这样我们在IDE运行图像脚本的时候,可以清楚地在手机画面上看到点击位置:
在这里插入图片描述
在这里插入图片描述
所以在遇到,脚本执行了,但是没有点击效果的时候,不妨打开手机设置,启用“显示触摸操作”,看下究竟是脚本执行了无响应?还是脚本真的没有执行这个点击动作。

另外一个方式是,在IDE的log查看窗里,查看图像算法给出的识别结果(找带有关键词 match result 的 debug 信息):

[15:17:32][DEBUG]<airtest.core.api> match result: {'result': (439, 348), 'rectangle': ((370.76, 265.76), (370.76, 431.76), (508.76, 431.76), (508.76, 265.76)), 'confidence': 0.975566565990448, 'time': 0.3353738784790039}

可以看到,图像算法给出的识别结果是(439, 348),我们可以借助IDE查看移动设备坐标的小工具,来检查下这个结果是否是符合我们预期的结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个方式的好处就是,有时候我们发现,脚本的实际点击位置,偏离了我们的预期,我们就可以到log查看窗里,找到算法识别出来的结果,用坐标工具去设备画面上核对算法结果是否符合我们的预期,是不是真的找偏了。

还有个很直观的方式,就是生成Airtest报告来查看,可以非常直观的看到点击步骤的执行情况,在画面上的具体点击位置等:

在这里插入图片描述

3.Airtest的点击偏移

默认情况下,Airtest都是点击图像的中心位置的,也就是 target_pos=5 的位置。如果想要做点击偏移,比如我就要点击图片的左上角位置,那就要先好好了解这个 target_pos 是个什么参数了:
在这里插入图片描述
如图所示,target_pos 用于设置在匹配结果图像上的操作位置,取值为1-9的整数,默认为5(即图像中心位置)。如果我们要点击图像左上角的位置,那我们必须手动指定 target_pos=1:

touch(Template(r"tpl1658387780768.png", target_pos=1, record_pos=(0.108, -0.517), resolution=(720, 1440)))

图像点击偏移,常用于下述场景中:

3.1、一个是,当我们的页面中,存在很多个相同的图标,我们想指定点击某个位置的图标,就有可能用到 target_pos 的参数,举个例子,在下述的页面中,有3个相同的播放按钮:

在这里插入图片描述
如果我们想点击第一个播放按钮,但是仅仅截图图片,是无法保证一定可以点到第一个播放按钮的。

但是如果我们扩大截图范围,并且通过指定 target_pos ,就可以确保我们能点到第一个目标按钮:
在这里插入图片描述
在这里插入图片描述

3.2、另外一个常用的场景是,当我们的点击图片特征点太少时,可以适当增加截图范围,然后通过设置 target_pos ,来点到我们的目标位置。

在这里插入图片描述
假设我们想点击上图黄框内的button,如果我们仅仅截图目标图像 ,可以预想的到,目标图像底色一致,基本没有变化,里面也仅有简单的线条,这样的图像脚本,很容易被算法判定为特征点过少,或者是识别到了错误的目标上去。

当我们扩大截图范围,给截图增加更多的特征点,并且适当地设置 target_pos ,就能得到一个兼容性效果更好的图像脚本了:
在这里插入图片描述

4. 拓展:Airtest的其它点击参数

# 点击绝对坐标
touch([100,100])

# 点击图片的右下角位置
touch(Template(r"tpl1606730579419.png", target_pos=9))

# 点击2次【不一定能实现双击的效果】
touch([100, 100], times=2)

# 在Android和Windows下,可以设置点击持续时间
touch([100, 100], duration=2)

# 右键点击(Windows)
touch([100, 100], right_click=True)

# 双击
double_click([100, 100])
double_click(Template(r"tpl1606730579419.png"))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

台灯的功能作用有哪些?分享好用的台灯

照明对于我们来说是非常重要的&#xff0c;从远古时期的钻木取火到古代的蜡烛、油灯以及近代电灯&#xff0c;可以说人们在不断的创造着能够发亮的东西&#xff0c;而现在电灯的种类很多&#xff0c;包括壁灯、吊灯、台灯等&#xff0c;因为实际用到的环境不同起到的作用也不尽…

抖音矩阵号/抖音短视频SEO矩阵系统源码开发及开发者思路分享....

抖音矩阵号短视频系统&#xff0c;抖音矩阵号系统源码开发,思路分享&#xff0c;说一点开发者掏心窝子的话...... 一套优秀的短视频获客系统&#xff0c;支持短视频智能剪辑、短视频定时发布&#xff0c;短视频排名查询及优化&#xff0c;短视频智能客服等&#xff0c;那么短视…

C语言进阶---动态内存管理

1、为什么存在动态内存分配&#xff1f; 我们已经掌握的内存开辟方式有&#xff1a; int a 20; //在栈空间上开辟四个字节。 char arr[20]; //在栈空间上开辟10个字节的连续空间。但是上述的开辟空间的方式有两个特点&#xff1a; 开辟空间大小是固定的数组在申…

基于JSP+Servlet+Mysql客户管理系统

基于JSPServletMysql客户管理系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.个人信息修改4.数据分析5.市场管理6.线索管理7、联系人8、客户管理9、交易管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基…

【弱网】clumsy的filter语法设置

clumsy 官方说明 jagt WinDivert 的语法 https://github.com/basil00/Divert/wiki/WinDivert-Documentation#7-filter-languageDivert大神们的改版 clumsy-regoutbound 发送 inbound

CVPR2023 Openlanev2 挑战赛:第一名方案解读

引言: 如第一篇挑战赛的博客(# CVPR2023挑战赛之-开放车道拓扑信息(OpenLane Topology)的测试【1】)所说,这项任务,实际上是一个复合任务,其评价指标也是语义分割、目标检测加拓扑位置关系三个指标的精准性平均值。本博客就第一名公布的Arxiv方法进行了解读,并对topol…

iview input组件clearable清空属性无法清空双向绑定值的原因解决

最近在使用iview新版本 input组件时&#xff0c;刚开始发现使用v-modal绑定的值&#xff0c;在点击clearable清除input框内容时&#xff0c;再次搜索发现参数还是没有被清掉 于是仔细查看代码的细节&#xff0c;才发现问题所在&#xff1a; 原来我绑定的参数的中文名称&#x…

【C1】数据类型,运算符/循环,数组/指针,结构体,main参数,static/extern,编译预处理,gdb,makefile

文章目录 1.数据类型&#xff1a;编译器&#xff08;compiler&#xff09;与解释器&#xff08;interpreter&#xff09;&#xff0c;中文里的汉字和标点符号是两个字节&#xff0c;不能算一个字符&#xff08;单引号&#xff09;2.运算符/循环&#xff1a;sizeof/size_t3.数组…

SQL中的——左连接(Left join)、右连接(Right join)、内连接(Inner join)

前言 最近有一个开发需求&#xff0c;需要实现一个复杂年度报表&#xff0c;前后端都是博主开发&#xff0c;这里的业务逻辑比较复杂&#xff0c;也很锻炼sql能力&#xff0c;这里博主也将表的内外连接做了一个整理分享给大家 一、概念 首先还是介绍一下这三个的定义 1.Lef…

C#难点语法讲解之abstract---从应用需求开始讲解

一、背景故事 我们正常写的脚本&#xff0c;一般都是非常完整的&#xff0c;脚本完整意味着需求完整。 例如&#xff0c;我是售货员&#xff0c;现在苹果5元&#xff0c;梨子3元&#xff0c;西瓜20元&#xff0c; 一个人&#xff0c;来买了5个苹果&#xff0c;4个梨子&#xf…

springcloud二回头

Spring Cloud 一种微服务&#xff0c;以往的单体项目在一定程度的累积后&#xff0c;一些服务需要进行拆分&#xff0c;独立进行开发&#xff0c;然后再合起来&#xff0c;之前的是装成一个包进行部署 不同的搭配&#xff1a; spring cloud和boot的对应版本&#xff1a; Rest…

JavaScript 内置对象 数据类型

目录 JavaScript 内置对象 1.内置对象 2.查文档 2.1MDN 2.2 如何学习对象中的方法 3.Math对象 3.1Math 概述 3.2随机数方法 random() 4. 日期对象 4.1Date 概述 4.2Date() 方法的使用 4.3 日期格式化 4.4获取毫秒的总的毫秒形式 5.数组对象 5.1数组对象的创建 5…

1. Netty核心功能与线程模型详解

Netty 1. 认识Netty2. 第一个Netty程序 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 01、Netty核心组件快速了解 02、Hello,Netty! 03、深入理解Channel、EventLoop(Group) 04、深…

MySql的使用

目录 一、安装与启动1.1 Ubuntu下的使用1.2 Mac下的使用 二、MySQL图形化管理工具的使用三、数据完整性3.1 数据类型3.2 约束 四、常用的sql语句4.1 数据库操作4.2 数据库表操作1.查看当前数据库中所有表2.查看建表的数据结构3.创建表4.添加字段5.修改字段6. 删除字段7. 查看表…

nodejs之net模块的使用

vscode的底层ipc通讯都是基于node的net模块进行封装&#xff0c;今天大概讲解下net模块的使用 官方文档地址&#xff1a;https://nodejs.cn/api/net.html net模块的作用 net模块提供了基于流的方式构建tcp或ipc服务器和客户端的能力。 node:net 模块提供异步网络 API&#x…

ChatGPT发展与技术基础

一、ChatGPT发展 【ChatGPT——GPT3.5】 诞生于&#xff1a;2022 年 11 月 类型&#xff1a;对话场景的大语言模型 特点&#xff1a;更贴近人的方式与使用者互动&#xff1b;在理解人类意图、精准回答问题、流畅生成结果方面远超人类预期。 功能&#xff1a;可以回答问题、…

bug--两个表格,数据来自于同一个抽屉表格,现在让两个表格的数据 不能一样--处理checked 和 disabled

步骤一、拿到表格数据 步骤二、处理 checked&#xff0c;要区分是A表 还是B表&#xff0c;这个区分要在 A表、B表 数据展示的组件里&#xff08;根源&#xff09;区分 &#xff1a; 点击A表&#xff0c;抽屉表格中A 已选的状态 是 checked 且 disabled&#xff0c;B 已选的 抽…

HCIA复习一

OSI七层模型 7.应用层&#xff1a; 用于人机交互&#xff0c;将抽象语言转化为编码&#xff1b; 6.表示层&#xff1a; 将编码转换为二进制&#xff1b;&#xff08;加解密&#xff0c;压缩解压缩&#xff09; 5.会话层&#xff1a; 管理通信双方的会话&#xff0c;细分为…

数模笔记6.30

目录 一、基础 建模步骤&#xff1a; 论文格式&#xff1a; 写作过程&#xff1a; 赛题类型&#xff1a; 二、优化类模型 2.1简单的优化模型 2.2数学规划模型 三、Lingo 一、基础 建模步骤&#xff1a; 找目标 找条件&#xff08;变量、常量、自己的假设&#xff09…

Tomcat的优化多实例部署

一.tomcat核心组件模块 1.web容器&#xff1a;接受.响应请求 2.展示动态页面 2..JSP容器&#xff1a;翻译java---》servlet 3.serverlet容器&#xff1a;serverlet代码格式是用于JSP容器处理 简述&#xff1a; web容器 &#xff1a;1.接受、响应请求 2.展示动态页面 JSP容…