Appium自动化测试如何判断App是否异常退出

Appium自动化测试中应用异常退出检测:多策略监控与实战实现 在移动应用自动化测试领域,稳定性是衡量测试框架成熟度的关键指标。其核心原理在于对被测应用生命周期的持续监控,通过主动探测应用状态来确保测试流程的可靠性。这项技术的核心价值在于将模糊的“脚本执行失败”转化为精准的“应用崩溃诊断”,从而显著提升问题排查效率。典型的应用场景包括长时间运行的稳定性测试、复杂交互后的状态验证以及CI/CD流水线中的自动化质量关卡。本文聚焦于**Appium**框架,深入探讨如何通过组合**Session状态监听**、**系统进程轮询**与**日志实时分析**等多维度策略,构建一套健壮 阅读详情

以下内容 由ChatGPT生成,仅作记录

在 Appium 中判断一个应用是否已经异常退出(如崩溃或被强制关闭)是一项重要任务。以下是一些方法来检测应用是否正常运行:


1. 检测会话是否有效

Appium 的 driver.session_id 是会话是否存在的标志。如果会话失效,说明应用可能已崩溃或会话被中断。

示例代码:
if driver.session_id is not None:
    print("App 仍在运行")
else:
    print("App 已退出或崩溃")

2. 检查应用当前状态

Appium 提供了 driver.query_app_state(app_id) 方法,可以用来检查应用的当前状态。

示例代码:
app_package = "com.example.myapp"  # 替换为你的应用包名

state = driver.query_app_state(app_package)
if state == 1:  # NOT_INSTALLED
    print("App 未安装")
elif state == 2:  # NOT_RUNNING
    print("App 未运行")
elif state == 3:  # RUNNING_IN_BACKGROUND
    print("App 在后台运行")
elif state == 4:  # RUNNING_IN_FOREGROUND
    print("App 在前台运行")
else:
    print("未知状态")

3. 捕获异常

当应用崩溃或异常退出时,Appium 的大多数操作都会抛出异常。你可以捕获这些异常来判断应用是否已退出。

示例代码:
from selenium.common.exceptions import WebDriverException

try:
    # 尝试与应用交互
    driver.find_element_by_id("com.example.myapp:id/element").click()
    print("App 正常运行")
except WebDriverException as e:
    if "A session is either terminated or not started" in str(e):
        print("App 已异常退出")
    else:
        print(f"其他错误: {e}")

4. 检查当前 Activity

通过 driver.current_activity 检查当前的 Activity。如果返回 null 或者不是预期的 Activity,可能说明应用已退出。

示例代码:
try:
    current_activity = driver.current_activity
    if current_activity is None:
        print("App 可能已退出")
    else:
        print(f"当前 Activity: {current_activity}")
except Exception as e:
    print(f"无法获取当前 Activity: {e}")

5. 监听 Logcat 日志(适用于 Android)

使用 adb logcat 命令实时监控日志输出,可以捕获应用崩溃的相关信息(如 FATAL EXCEPTION)。

示例代码:
adb logcat | grep "FATAL EXCEPTION"

在代码中读取 Logcat:
import subprocess

def monitor_logcat():
    process = subprocess.Popen(["adb", "logcat"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    while True:
        line = process.stdout.readline().decode('utf-8')
        if "FATAL EXCEPTION" in line:
            print(f"App 崩溃日志: {line}")
            break

monitor_logcat()

6. 通过检查应用是否在设备上运行

使用 adb shell dumpsys activity 检查应用的运行状态。

示例命令:
adb shell dumpsys activity activities | grep com.example.myapp

示例代码:
import subprocess

def is_app_running(app_package):
    try:
        result = subprocess.check_output(
            f"adb shell dumpsys activity activities | grep {app_package}", shell=True
        ).decode('utf-8')
        return app_package in result
    except subprocess.CalledProcessError:
        return False

app_package = "com.example.myapp"
if is_app_running(app_package):
    print("App 正在运行")
else:
    print("App 已退出或崩溃")

7. 使用 Appium 的 App 重启机制

如果检测到应用已退出,可以通过 driver.launch_app() 重启应用。

示例代码:
try:
    driver.launch_app()
    print("App 已重新启动")
except Exception as e:
    print(f"无法重启应用: {e}")

总结

  1. 轻量方法:
    • 使用 driver.session_id 或 driver.query_app_state() 检查会话和应用状态。
  2. 深入检查:
    • 捕获 WebDriverException 或监控 Logcat 日志。
  3. 恢复机制:
    • 结合检测和重启应用,确保测试流程不中断。

通过这些方法,你可以有效判断 App 是否异常退出,并在必要时采取补救措施。

Appium基础操作&元素定位实操入门 本篇主要介绍Appium基础操作&元素定位实操入门,大家共同学习。 阅读详情

相关推荐

iOS自动化测试:XCUITest与Appium实现右滑退出手势详解

UI自动化测试是移动应用开发中保障交互稳定性的关键技术,其核心原理是通过脚本精确模拟用户操作,替代重复性手动测试。在iOS生态中,XCUITest作为官方框架,通过XCUICoordinate API提供了最接近系统底层的手势模拟能力,能高效实现如右滑退出等复杂手势的自动化。这项技术对于提升回归测试效率、确保核心导航流程的健壮性具有重要价值,广泛应用于持续集成、压力测试和数据批量录入等场景。本文聚焦于**右滑退出**这一高频交互手势,深入剖析其在XCUITest和Appium等主流框架下的实现方案与参数调优

weixin_42527654的博客 237

Appium-Get App State(获取应用程序状态)

Get app stateExample UsageDescriptionSupportAppium ServerAppium ClientsHTTP API SpecificationsEndpointURL ParametersJSON ParametersResponse Get the given app status on the device //获取设备上给定的应用程序状态 Example Usage Java driver.queryAppState('com.apple

weixin_45576146的博客 1344

软件测试 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)

常见痛点 App 自动化测试中有些常见痛点问题,如果框架不能很好的处理,就可能出现元素定位超时找不到的情况,自动化也就被打断终止了。很容易打消做自动化的热情,导致从入门到放弃。比如下面的两个问题: 一是 App 启动加载时间较久(可能 App 本身加载慢,可能移动设备本身加载应用速度慢,也可能首页广告时间较长)。 另一个是各种弹框的出现,广告弹框,升级弹框,评价弹框等。在框架中如果不能处理好上面的情况, 以雪球 App 出现的几种弹框举例: 弹框一: 弹框二: 弹框三: 2、弹框处理 2.1 处理方.

weixin_46635091的博客 1971

python使用appium打开程序后,为什么没有操作后程序就自动退出了

最后,确保你的测试环境(包括设备、模拟器、Appium服务器和客户端)都是最新的,并且相互兼容。如果Appium不适合你的需求,你可以考虑使用其他自动化工具,如XCUITest(对于iOS)或Espresso(对于Android)。当使用Appium打开应用程序并在没有执行任何操作后它自动退出,这可能是由于几个不同的原因。方法将其带回到前台。但请注意,这并不意味着应用程序会一直在后台运行而不被关闭——这仍然取决于应用程序本身的逻辑。你的测试代码可能存在问题,导致应用程序在启动后没有正确执行后续操作。

得塔云的博客 1575

Appium自动化测试:详解应用启动与退出的核心配置与最佳实践

移动应用自动化测试是保障软件质量的关键环节,其核心原理在于通过脚本模拟用户操作,对应用功能进行验证。在技术实现上,Appium作为主流的跨平台自动化测试框架,通过WebDriver协议将测试指令翻译为原生平台(如Android的UiAutomator2和iOS的XCUITest)可执行的命令,从而实现对应用的精准控制。其技术价值在于提升了测试的覆盖率和执行效率,是持续集成与交付流程中的重要组成部分。在实际应用场景中,无论是电商、社交还是金融类App的回归测试,稳定可靠的脚本都始于对应用生命周期的妥善管理。本

dianwei5413的博客 583

解决Linux下Questasim中代码字体非常小

Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ...

SummerXRT的博客 7815

appium学习总结5 - 操作设备

操作设备

因热爱而坚持,因坚持而愈发热爱。 831

Halcon Socket TCP通讯:从算子调用到工业视觉系统集成

本文详细介绍了Halcon Socket TCP通讯在工业视觉系统中的应用与优化技巧。从基础算子调用到高并发处理,再到与PLC、机器人及MES系统的集成实战,提供了全面的解决方案和性能优化建议,帮助开发者高效实现工业视觉系统的通讯需求。

weixin_33502772的博客 248

appium默认60秒关闭应用的问题_appium60秒退出(1),面试官不讲武德

分析:–command-timeout 60 The default command timeout for the server to use for all sessions (in seconds and should be less than 2147483). Will still be overridden by newCommandTimeout cap。在cmd命令行,对应目录加时间参数即可:–command-timeout 600。意思是默认60秒过期,超过60秒就会自动。

2401_84265548的博客 1023

全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

-----------------------推荐Top5结果如下--------------------------------------------第一条数据前10列结果展示为:----------------------------------------相同种类前10的id结果展示为:--------------------相似度top5(商品id:14,平均相似度:0.522356)相似度top1(商品id:1,平均相似度:0.983456)若属于该spu_id,则内容为1否则为0。

Eternity_04的博客 1954

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

appium自动化测试

Appinum前置知识 app类型和区别 1556603587000 Andriod SDK 元素获取—UI Automator adb命令实践 Android 调试桥 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。 Tips: 在 android_s...

linhua_111的博客 3万+

新出的智谱GLM-4.7很牛逼?

Zhipu AI(智谱)最近发布的 GLM-4.7 再次刷新了开源大模型的天花板。作为一款约 400B 参数规模的 MoE 模型,它不仅在传统的代码与推理任务上超越了 DeepSeek-V3.2 和 Kimi-K2 等强力对手,更通过**“保留思考(Preserved Thinking)”和“交错思考(Interleaved Thinking)”**等架构级创新,重新定义了 Agentic Workflow 的设计范式。

kakaZhui的博客 2397

Appium App自动化测试框架【一】

基础篇【1】: 清理本地文件;卸载、再安装App;po执行用例、 断言;Appium启动session;

谢智超的博客 2154

VMware Horizon 8 2111 部署系列(九)创建即时克隆桌面池

即时克隆桌面池是在 vCenter Server 中使用 vmFork 技术(称为即时克隆 API)从最佳配置映像创建的自动桌面池。即时克隆共享同一个基础映像虚拟机,使用基础映像虚拟机的快照创建的,它使用的存储空间也少于完整虚拟机。 即时克隆始终保持开机状态,并在注销后从当前发布的映像重新创建。...

白昼的技术专栏 4043

本地Pycharm连接远程服务器详细配置过程(直接在本地使用服务器显卡,很棒)

相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。

NorthSmile的博客 4万+

在使用appium+python执行自动化测试时app异常退出【Shutting down because we waited 60 seconds for a command】

自动化测试中首条用例执行时App意外退出,经排查发现是Appium会话超时导致。通过增加newCommandTimeout参数未能根本解决问题,最终发现是测试代码在setUpClass()和setUp()中重复创建driver会话而未关闭前一个会话所致。未关闭的会话会占用资源并导致超时错误。解决方法是在setUpClass()最后添加driver.quit()关闭会话,或通过判断session_id确保会话有效后再执行quit操作。这解决了资源占用、会话冲突和超时错误等问题。

qq_57667426的博客 465

【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据

在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式(1)人工通知(比如常规的使用邮件),然后运维人员手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hive 的外部表和内部表 schema那么现在,有了 Paimon ,我们可以利用其特性,自动识别并同步 DDL 这些变化,并同步至 hive 的 paimon 格式表中。

欢迎来到我的博客,一起探索代码里的世界! 1250

selenium 和 appium 面试题

1. 什么是Selenium? Selenium是浏览器自动化工具,主要用来Web的自动化测试,以及基于Web的任务管理自动化。它支持的语言有:python、Java、ruby、JavaScript等,并且几乎能在主流的浏览器上运行。 Selenium2.0、Selenium3.0主要由三大部分组成:SeleniumIDE、Selenium WebDriver、Selenoium Grid。 ...

yipianfeng_ye的专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Mobile App自动化测试技术及实现

mobile app自动化测试技术及实现

quanhaoH的专栏 8655

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python+appium自动化启动APP

听说自动化测试很厉害,所以我自己也是尝试搭建了环境,这里主要是记录APP启动操作,具体代码如下(这里以智联招聘做了一下练习): 此程序实现的是,登录智联成功后并退出。 import time from appium import webdriver # 设置appium的配置并启动Appium caps = {} caps['platformName'] = 'Androi...

weixin_30795127的博客 454

Python代码实现,appium自动化测试框架,核心代码类文件封装

这个示例只是一个开始,Appium自动化测试框架的学习深度和广度非常广泛,我希望这个示例可以为你提供一些灵感和启示,让你能够深入了解Appium自动化测试框架的工作原理和实践。Python代码实现,appium自动化测试框架,核心代码类文件封装。

HRD的博客 2011
上一篇: Pytest Selenium WebDriver退出
下一篇: Playwright的page.locator和page.query_selector的区别
Free Tester
博客等级 码龄2年 121粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值