首页 > 系统相关 >打开、关闭、切换App以及清除App进程,操作so easy!

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

时间:2024-05-17 11:18:35浏览次数:29  
标签:__ App poco so easy com app 500

此文章来源于项目官方公众号:“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 -= 1
    home()
   
    
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)
    
    #切换到iMovie
    start_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

标签:__,App,poco,so,easy,com,app,500
From: https://www.cnblogs.com/AirtestProject/p/18197517

相关文章

  • ABP 框架 AutoMapper 映射实体时提示 Unmapped members were found 缺少 FullAuditedE
    在配置MapperProfile的时候, 运行提示映射出错:对于Workflow->WorkflowDto和CreateUpdateWorkflowDto->Workflow的映射,存在没有映射的属性 IsDeleted,DeleterId,DeletionTime,LastModificationTime,LastModifierId,CreationTime和CreatorId。我之前写代码都没有映射这......
  • springboot怎么将List集合数据转成JSON数组
    SpringBoot默认使用Jackson框架将Java对象转换成JSON格式。要转换List集合数据为JSON数组,可以采用以下两种方法:1.使用@ResponseBody注解在SpringBoot中,可以使用@ResponseBody注解标注要返回的List集合数据,让Spring自动将其转换成JSON数组。例如:@GetMapping("/list")@Respo......
  • 关于SpringBoot项目使用Hutool工具进行json序列化时出现Null值过滤或者丢失的问题(转
    ##问题描述:SpringBoot项目中,一直使用的时Hutool的json转换工具,被强制要求不能使用fastJson工具;之前都没什么问题,突然有一次使用parseObj()进行json字符串转换json对象时,突然报错:Noserializerfoundforclasscn.hutool.json.JSONNullandnopropertiesdiscoveredtocreate......
  • ASP.NET Core Web中使用AutoMapper进行对象映射
    前言在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射库就随之而出了,这些库可以自动完成对象之间的映射,从而减少大量......
  • Socket层
    【一】什么是socketSocket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以,我们无需深入理解tcp......
  • 通过mybatisflex获取多数据源mapper
    基于mybatisflex1.8.4:@NoArgsConstructor(access=AccessLevel.PRIVATE)@Slf4jpublicclassDataSource{publicstaticfinalStringA="a";publicstaticfinalStringB="b";publicstaticfinalStringC="c";pub......
  • Java 网络编程(socket)
    概念:1.什么是网络编程?  计算机跟计算机之间通过网络进行数据传输。2.通信的软件架构C/S与B/S的区别?  C/S:客户端/服务端模式(需要开发客户端)  B/S:浏览器/服务端模式(不需要开发客户端)  网络编程三要素:1.IP     设备在网络中的地址,是唯一的标识2.......
  • mybatis-plus mapper整理
    mybatis-plusmapper整理简介提供了操作数据的框架,避免使用jdbc操作数据,加速开发效率,支持多种数据库(databaseId)。既支持sql,mapper的编写,也支持注解@Select等,同时提供了一二级缓存,以及BaseMapper接口以及IService、ServiceImpl这些接口,来提供模板化的方法。同时还支持逆向工程生......
  • 关于“error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for
    安装库之前一定要注意python版本,今天鬼迷日眼的装一堆堆库,一个回车冒出来这个鬼问题。百度无果后灵光乍现,只安装报错时对应的库:condainstallnumpy==1.20.1结果在输出里找出这一段:Specifications:-numpy==1.20.1->python[version='>=3.7,<3.8.0a0|>=3.8,<3.9.0a0|>=......
  • NODEJS通过发送json数据查询目标服务,实现服务器状态监控,发现异常发送到微信群提醒
    root@aea87fa6e6a2:/home/node#catlogin2.jsconstrequest=require('request-promise');constmoment=require('moment');constcron=require('node-cron');process.env.TZ='Asia/Shanghai';//设置时区为上海时区constrp......