UI自动化测试的正确姿势 —— Airtest设备连接API详解第一篇

UI自动化测试的正确姿势-Airtest设备连接&API详解第一篇

一、背景

Airtest作为一款优秀的自动化测试工具,有着强大的API功能,处理日常自动化测试过程中需要的各类操作。今天就给大家逐一介绍关于设备连接和常用API部分,结合自动化测试中的各类需求,看看如何通过使用Airtest来快速实现。

二、设备连接

1、Android真机连接

  • 请使用USB线连接手机和电脑,手机上出现的允许USB调试 弹窗点击确定
  • 点击连接面板中的刷新ADB 按钮,设备列表将会刷新
  • 点击列表内对应设备的Connect 完成连接
  • 若设备未刷出,点击重启ADB 按钮.

2、IOS真机连接

IOS的连接相对比较复杂,可以参看官方文档链接:https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/4_ios_connection/

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

3、Windows窗口连接,可通过以下三种方式:

  • 选择游戏画面,将会有一个绿色/红色细线框,实时框选出鼠标位置对应的窗口
  • 搜索窗口,在弹出的窗口list中选择要连接的窗口直接连接


以上两种都是将窗口嵌入到Airtest IDE中:


如果窗口比较大,不适合嵌入到Airtest中的,或者嵌入后显示异常的,可以在"选项"》"设置"中,勾选上"Windows窗口无嵌入连接"选项:


这样就可以使用无嵌入式的方式来连接窗口:

最后,如果被测的软件是需要全屏显示的,可以通过连接桌面来实现,点击连接桌面按钮:


运行时,将Airtest IDE最小化,让被测软件显示在最上层即可。

三、Airtest辅助窗常用API

想要用好Airtest,辅助窗中的功能是必不可少的,用好它能解决90%以上的操作问题。工欲善其事,必先利其器,因此我们先来介绍怎样使用这些功能来帮助我们解决自动化中常见的需求:

1、touch

最常用的操作,鼠标左键点击。框选你要点击的地方即可。默认是点击框选图片的中心位置。参数:

根据参数可以看出:

  • 可以点击图片,也可以点击绝对坐标(x,y)
  • 可以控制点击的次数。但是实测发现,有时候想双击,设置times=2,
    并不能实现双击效果,而是要用另外一个函数:double_click来实现双击效果
  • 可以设置鼠标左边点击后按住的时间,默认是0.01s, 就是单击效果。如果想实现长按1秒的效果,设置duration=1
  • 可以通过设置right_click=True来实现右键点击效果(仅限windows模式)

2、wait

常用操作,等待当前画面上出现某个匹配的Template图片:


比如你做了一个操作要等几秒下一个页面上的元素才显示出来,通常的做法是强制sleep几秒之后,再操作。而用wait函数,则可以设置每隔多长时间就找一次,找到了就继续下一步,而不是每次都死等那么长的时间,可以提高脚本运行的速度。有以下参数可以设置:

  • v – 要等待出现的目标Template实例
  • timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值
  • interval – 尝试查找匹配项的时间间隔(以秒为单位)
  • intervalfunc – 在首次尝试查找匹配失败后的回调函数

示例1:

# 每3秒查找一次, 120秒之后还没有找到则超时报错
wait(Template(r"tpl1606821804906.png"), timeout=120, interval=3)

示例2:

# 查找目标失败时,指定回调自定义的"notfound"函数
def notfound():print("No target found")
wait(Template(r"tpl1607510661400.png"), intervalfunc=notfound)

3. swipe

在当前设备画面上进行一次滑动操作:

  • v1 – 滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y)
  • v2 – 滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)
  • vector – 滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)

常用场景1:当前屏幕上没有你要操作的内容,需要手机上滑0.5个屏幕,才能点击你想点击的内容

w,h=device().get_current_resolution()#获取手机分辨率
touch([0.5*w, 0.5*h])#点击手机中心位置
swipe((0.5*w,0.8*h),vector=(0,-0.5),duration=0.1) #在0.1s内上滑0.5个屏幕

常用场景2:app打开后,有5个介绍页,滑动后才能正式进入app首页,这个时候就可以使用swipe函数来实现:

# 收取设备的宽和高
width, height = device().get_current_resolution()
# 计算滑动点的起始位置和结束位置
start_pt = (width * 0.9, height / 2)
end_pt = (width * 0.1, height / 2)
# 滑动5次,每次中间睡眠1秒,等待设备响应
for i in range(5):swipe(start_pt, end_pt)sleep(1)

4. exists

检查设备上是否存在给定目标, 如果未找到目标,则返回False,否则返回目标的坐标:

常用场景:比如我们进入某个页面时,屏幕上可能会弹出一个弹窗广告,但也有可能不弹。如果弹出了弹窗广告,我们就要先关掉弹窗,然后继续操作下一步。

# 先判断是否存在弹窗图片,存在就点击弹窗图片上的关闭按钮
if exists(Template(r"弹窗图片.png")):touch(Template(r"弹窗图片上的关闭按钮.png"))

===================================================================
以上就是本次的全部内容,喜欢的宝子们,麻烦点个赞+收藏+关注,一键三连啦~

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

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

相关文章

leetcode 15. 三数之和(优质解法)

代码&#xff1a; class Solution {public static List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> listsnew ArrayList<>();int lengthnums.length;for(int i0;i<length-3;){int lefti1;int rightlength…

【星火大模型】api使用

讯飞星火官方首页 准备工作 注册讯飞星火账号申请开发者api试用 从一个demo开始 讯飞星火官方的程序员为我们提供了非常优秀的demo&#xff0c;基本涵盖了大多数常用语言。 demo下载链接 这里我选用Java带上下文调用示例 下载后可以看到这是一个idea项目&#xff0c;直接…

Python实现学生信息管理系统(详解版)

Python实现学生信息管理系统-详解版 个人简介实验名称&#xff1a;学生信息管理系统系统功能实验步骤详讲添加入住学生信息删除学生的住宿信息修改学生的住宿信息查询学生的住宿信息显示所有学生住宿信息显示所有请假学生的信息 运行截图展示1.主界面2.添加新的入住学生信息3.显…

Django路由分发

首先明白一点&#xff0c;Django的每一个应用下都可以有自己的templates文件夹&#xff0c;urls.py文件夹&#xff0c;static文件夹&#xff0c;基于这个特点&#xff0c;Django能够很好的做到分组开发&#xff08;每个人只写自己的app&#xff09;&#xff0c;作为老大&#x…

如何自定义spring-boot-starter

1. 创建自定义starter 1.1 生成Maven工程 mvn archetype:generate -DarchetypeGroupIdorg.apache.maven.archetypes -DarchetypeArtifactIdmaven-archetype-quickstart -DarchetypeVersion1.4交互式输入groupId、artificatId、version&#xff0c;生成Maven工程后用IDEA打开 …

element ui 表格合计项合并

如图所示&#xff1a; 代码&#xff1a; <el-table height"400px" :data"tableData " borderstyle"width: 100%"stripe show-summaryref"table"id"table"> </el-table>监听表格 watch: { //监听table这个对象…

【华为数通HCIP | 网络工程师】821刷题日记-IS-IS(2)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

【面试】typescript

目录 为什么用TypeScript&#xff1f; TS和JS的区别 控制类成员可见性的访问关键字&#xff1f; public protected&#xff09;&#xff0c;该类及其子类都可以访问它们。 但是该类的实例无法访问。 私有&#xff08;private&#xff09;&#xff0c;只有类的成员可以访问…

Apache Flink(三):Flink核心特性及应用场景

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

三次握手和四次挥手

TCP 协议简述 TCP 提供面向有连接的通信传输&#xff0c;面向有连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接…

com.mongodb.MongoSocketOpenException: Exception opening socket

估计mongodb数据库没开启&#xff0c;或者链接错误了&#xff0c;谁又改了&#xff0c;唉 2023-11-29 16:19:45.818 INFO 39552 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017…

Intellij idea 内存不够用了,怎么处理?

目录 如何判断内存不够用了 下面演示一下如何开启内存指示器&#xff08;Memory Indicator&#xff09; 解决方案 第一种&#xff1a;双击"内存指示器(Mempory Indicator)" 第二种&#xff1a;增大Intellij Idea 最大可使用内存 如何判断内存不够用了 运行项目后…

(一)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

Linux 基本语句_13_消息队列

概念&#xff1a; 不同进程能通过消息队列来进行通信&#xff0c;不同进程也能获取或发送特定类型的消息&#xff0c;即选择性的收发消息。 一般一个程序采取子进程发消息&#xff0c;父进程收消息的模式 常用函数功能&#xff1a; fork(); // 创建子进程 struct msgbuf{ …

(C++)移动零--双指针法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…

Web安全漏洞分析-XSS(下)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

ntopng如何将漏洞扫描与流量监控相结合,以提高网络安全性

来源&#xff1a;艾特保IT 虹科干货 | ntopng如何将漏洞扫描与流量监控相结合&#xff0c;以提高网络安全性 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; ntopng为人所知的“身份”是被动流量监控。然而&#xff0c;如今的ntopng6.0也进化出主动监控功能来&#xf…

人工智能原理复习--知识表示(二)

文章目录 上一篇产生式表示法推理方式 结构化表示语义网络语义网络表示知识的方法和步骤应用题目 框架表示法下一篇 上一篇 人工智能原理复习–知识表示&#xff08;一&#xff09; 产生式表示法 把推理和行为的过程用产生式规则表示&#xff0c;所以又称基于规则的系统。 产…

支持向量机,硬间隔,软间隔,核技巧,超参数设置,分类与回归

SVM&#xff08;Support Vector Machine&#xff0c;支持向量机&#xff09;是一种非常常用并且有效的监督学习算法&#xff0c;在许多领域都有广泛应用。它可以用于二分类问题和多分类问题&#xff0c;并且在处理高维数据和特征选择方面非常强大。SVM算法的核心思想是通过找到…

在PyCharm中运行OpenCV

一、安装Anaconda配置python环境 这里选用清华大学开源软件镜像站&#xff1a;anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载的速度更快。 点击下载链接&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsin…