打开、关闭、切换App以及清除App进程,操作so easy!

news/2024/11/19 23:40:24/文章来源:https://www.cnblogs.com/AirtestProject/p/18197517

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途#

一、前言

很多新手同学在写自动化测试脚本的时候,打开、关闭、切换App的方式还是使用最基础的方式,也有同学在交流群内多次询问是否有打开、关闭、切换App以及清除App进程的方式、或接口,那么今天,我们详细来讲讲如何实现打开、关闭、切换App以及清除App进程操作。

二、打开、关闭、切换App以及清除App进程如何实现

2.1 打开App:start_app()

打开App的方式有很多,有通过poco点击应用图标的:

poco("手机管家").click()

也有通过Airtest图片点击:

但是以上两种方式,需要将App放置在当前界面上才能进行点击,但是我们可以直接调用Airtest的start_app()的接口,不用担心App放置的位置,可以直接打开App,只需要输入App的包名即可。

start_app("com.ss.android.article.news")

有些同学还不清楚我们如何获取我们想要的应用包名,点击AirtestIDE上自带的Android小助手可以查询,有关更多关于Android小助手的用法,可以点击查看我们的教程文档:

https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/7_android_assistant/

2.2 关闭App:stop_app()

同理,在退出App的时候,同学们可能会通过疯狂点击返回键退出App

keyevent("BACK")

但是操作不够优雅,我们可以使用stop_app()一键退出回到桌面

stop_app("com.taobao.taobao")

2.3 切换App

关于切换App界面的方式,大家比较关注这个点,对于Android跟iOS上是不一样的,在Android设备上,我们是可以通过ADB的方式去实现,可以省掉退出A应用,再打开B应用的一个步骤流程。

shell("monkey -p com.taobao.taobao -c android.intent.category.LAUNCHER 1")

但是在iOS设备上的时候,没有更好的捷径方式

start_app("应用A")
stop_app("应用A")
start_app("应用B")
stop_app("应用B")

2.4 清除后台

在测试完后,设备后台开了很多进程,这个会影响设备的流畅性,在Android设备上,我们可以通过打开App设备窗界面后,点击“一键清除后台”的按钮后,即可关闭全部后台进程了。

dev = device()
#一般Android设备可以从底部向上滑动唤出设备窗
dev.swipe_along([(500, 2295),(500,1500),(500,1000), (500, 100)])#唤出设备窗后,当出现了“关闭所有最近打开的应用”控件,点击即可全部清除所有app后台
if poco("com.huawei.android.launcher:id/clear_all_recents_image_button").exists():poco("com.huawei.android.launcher:id/clear_all_recents_image_button").click()       

在iOS设备上清除应用后台进程,则需要打开App切换器,然后逐个上划删除

#在部分机型或版本上,该辅助触控小圆点无法使用poco识别,所以使用图片识别比较稳妥
touch(Template(r"tpl1715678885473.png", threshold=0.6999999999999997, record_pos=(0.403, 0.008), resolution=(1170, 2532)))#在进入APP切换器后,可以判断目前设备上打开了多少窗口,并通过滑动关闭
while poco("AppSwitcherContentView").exists() and times > 0:swipe([0.5,0.8],[0.5,0.1])times -= 1

三、在Android设备上实操案例

结合上面的几个方式,我们用个小小的实操案例来看一下在Android上实现的效果

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)#清理后台
def clean_app():dev = device()#一般Android设备可以从底部向上滑动唤出设备窗dev.swipe_along([(500, 2295),(500,1500),(500,1000), (500, 100)])#唤出设备窗后,当出现了“关闭所有最近打开的应用”控件,点击即可全部清除所有app后台if poco("com.huawei.android.launcher:id/clear_all_recents_image_button").exists():poco("com.huawei.android.launcher:id/clear_all_recents_image_button").click()if __name__ == "__main__": #打开今日头条start_app("com.ss.android.article.news")sleep(3.0)#滑动今日头条界面for i in range(5):swipe((500,2100),(500,500))sleep(1.0)#通过ADB的方式,直接切换应用界面shell("monkey -p com.taobao.taobao -c android.intent.category.LAUNCHER 1")sleep(2.0)#滑动淘宝界面swipe((500,2100),(500,500))sleep(1.0)#关闭淘宝应用stop_app("com.taobao.taobao")sleep(1.0)#清除App后台clean_app()

四、在iOS设备上的实操案例

我们来看一下在iOS设备上实现打开、关闭、切换App的效果

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"
'''
前置条件(十分重要):
请提前按下面的操作设置好
辅助功能-触控-辅助触控(打开)- 单点(App切换器)
将辅助触控的小圆球透明度设置为100%
'''
from airtest.core.api import *
from poco.drivers.ios import iosPoco
poco = iosPoco()
import random#清理后台
def ios_clear_app(times=100):#在部分机型或版本上,该辅助触控小圆点无法使用poco识别,所以使用图片识别比较稳妥touch(Template(r"tpl1715678885473.png", threshold=0.6999999999999997, record_pos=(0.403, 0.008), resolution=(1170, 2532)))#在进入APP切换器后,可以判断目前设备上打开了多少窗口,并通过滑动关闭while poco("AppSwitcherContentView").exists() and times > 0:swipe([0.5,0.8],[0.5,0.1])times -= 1home()if __name__ == "__main__": #打开库乐队start_app("com.apple.mobilegarageband")sleep(3.0)#随机点击五个坐标点for i in range(5):random_x = random.randint(1000,2500)random_y = random.randint(200,900)touch((random_x,random_y))sleep(3.0)#关闭库乐队stop_app("com.apple.mobilegarageband")sleep(3.0)#切换到iMoviestart_app("com.apple.iMovie")sleep(3.0)home()sleep(3.0)#开始清理后台ios_clear_app()

五、小结

在本周课程中,我们介绍了打开、关闭、切换App,以及清除App后台的方式:

1、打开App:start_app()

2、关闭App:stop_app()

3、切换App:shell("monkey -p com.taobao.taobao -c android.intent.category.LAUNCHER 1")

4、清除App后台

以及在Android跟iOS设备上的不同效果。如果同学们在使用Airtest进行自动化测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群里告诉我们或者提交issue,也欢迎大家投稿。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

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

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

相关文章

稳定、省钱的 ClickHouse 读写分离方案:基于 JuiceFS 的主从架构实践

Jerry 是一家位于北美的科技公司,利用人工智能和机器学习技术,简化汽车保险和贷款的比价和购买流程。在美国,Jerry 的应用在其所属领域排名第一。 随着数据规模的增长,Jerry 在使用 AWS Redshift 时遇到了一些性能与成本的挑战。Jerry 重新设计了系统架构,使用 ClickHouse…

GDCL论文阅读笔记

Diffusion-Based Graph Contrastive Learning for Recommendation with Implicit Feedback论文阅读笔记 Abstract 提出问题: ​ 自监督学习模型大多采用随机辍学来构造附加的图视图,没有区分边的重要性。这些方法在捕获用户-项目交互图的结构属性方面的不足,导致了推荐性能的…

关于IDEA使用xml实现动态sql的问题

如上图,我在mapper层编写了一个list方法用于实现动态sql。 1.导入使用xml文件的mybatis依赖。 2.配置文件的修改 .properties .yml mybatis.mapper-locations=classpath:mapper/*.xml:这个配置项指定了 MyBatis 映射器 XML 文件的位置。 值 classpath:mapper/*.xml 表示 MyBa…

基于LoRa的智慧农业解决方案--ASR6601、SX1278、SX1262

我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”,加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。然而,目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面积广袤,大量的区域没…

服务器mac地址变化

检查是否开启了多路复用检查是否开启了随机硬件地址留待后查,同时方便他人 联系我:renhanlinbsl@163.com

基于阿里云实现手机号验证功能

一、阿里云手机短信验证码服务阿里云创建账号 https://home.console.aliyun.com/home/dashboard/ProductAndService搜索短信服务选择签名、资质管理、新增资质创建签名创建新模版,其中对映签名等信息查看模版获取ID 和 Key (1).选中头像,创建AccessKey创建工具类/// <summ…

第八章:路由基础

第八章:路由基础 路由: 在特定的拓扑上,选择从 source 节点到 destination 节点的路径。一个好的路由算法,即使面对 non-uniform traffic pattern,也能有效地均衡负载,使实际 throughput 更加接近于理想情况。 好的路由算法可以使路径长度尽可能短,从而减少跳数和传输的…

navicat怎么连接sqlserver

1.打开SQLServer配置管理器点击SQL Server 网络配置、把协议保持启用,如果默认已启用就不用管; 把IP地址里的IPAll里的TCP端口改为1433(SQL Server的端口是1433,Mysql的是3306); 检查SQL Native Client11.0的配置,确认协议也在开启,端口为1433; SQLServer的名称 这里的…

你知道 Java 有哪些引用吗?

判断对象是否要回收有引用计数法和可达性算法两种方式,无论哪种都离不开引用,本文将介绍Java的四种引用。前言判断对象是否要回收有引用计数法和可达性算法两种方式,无论哪种都离不开引用,本文将介绍Java的四种引用。一、概述二、详解 1. 强引用 概述 在Java程序中,强引用…

通过HPA+CronHPA组合应对业务复杂弹性伸缩场景

华为云CCE服务通过将HPA与CronHPA组合,实现指标弹性策略与定时弹性策略的有机协同,满足了客户业务复杂的弹性伸缩场景。本文分享自华为云社区《通过HPA+CronHPA组合应对业务复杂弹性伸缩场景》,作者:云容器大未来。背景 在k8s集群中,容器水平自动伸缩(HPA),可以根据容器资…

Linux基础知识(Ubuntu)

文件权限 意义权限类型 1. r 可读 2. w 可写 3. x 可执行/切换陌路 4. - 无权限通配符 * 匹配0个或多个字符串 ?匹配1个字符 [abcd] 匹配abcd中间任意一个字符 [a-Z] 匹配a-Z范围里的任意一个字符 [!abc] 不匹配方括号里的任何一个字符 ;与[^abc]一致帮助命令 man 语法 man […

join、inner join、left join、right join、outer join的区别

什么是联结?union、intersect等集合运算,它的特征是以 “行” 为单位进行操作,通俗点说,就是进行这些集合运算,会导致记录行数的增减,使用union会增加记录行数,使用 intersect 或 expect 会减少行记录,集合运算不会导致 “列” 数量的改变。而联结(join) 操作,就是将其…