提高Android自动化测试稳定性的方法(一)

简介: 在之前的一篇文章《移动端UI自动化过程中的难点及应对策略》中,我们提到在移动端自动化测试执行过程中经常会由于其他应用或者本应用的通知弹框阻断测试的执行,对此在iOS端我们可以通过关闭手机上的所有应用通知权限来一定程度的避免,在Android端我们则可以通过禁用通知栏来避免此类问题的发生,而如何禁用通知栏就需要用到上篇文章《让Android自动化辅助APP成为设备所有者(一)》中的方法,先将Android自动化辅助APP设置成为设备所有者。

关闭通知栏


当应用获取到DeviceOwner权限后,该应用就可以使用 DevicePolicyManager 类中的 API 来控制设备的一些行为了,具体实现如下:

注册一个自定义广播接收器

package com.android.jarvis.receivers
import android.app.admin.DevicePolicyManager
import android.content.BroadcastReceiver
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.annotation.RequiresApi
/**
 * adb shell am broadcast -a com.android.jarvis.statusbar --es setstatus [enable|disable]
 */
class StatusBarReceiver : BroadcastReceiver() {
    @RequiresApi(Build.VERSION_CODES.M)
    override fun onReceive(context: Context, intent: Intent) {
        val devicePolicyManager =
            context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
        val command = intent.getStringExtra(COMMAND)
        if (command == COMMAND_ENABLE) {
            devicePolicyManager.setStatusBarDisabled(getComponentName(context), false)
        } else if (command == COMMAND_DISABLE) {
            devicePolicyManager.setStatusBarDisabled(getComponentName(context), true)
        }
    }
    companion object {
        private const val COMMAND = "setstatus"
        private const val COMMAND_ENABLE = "enable"
        private const val COMMAND_DISABLE = "disable"
    }
    /**
     * 获取ComponentName,DevicePolicyManager的大多数方法都会用到
     */
    private fun getComponentName(context: Context): ComponentName {
        return ComponentName(
            context.applicationContext,
            JarvisAdminReceiver::class.java
        )
    }
}

在AndroidManifest.xml中注册广播

<receiver android:name=".receivers.StatusBarReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="com.android.jarvis.statusbar" />
            </intent-filter>
        </receiver>

安装好应用,然后激活DeviceOwner权限,执行下面的命令即可控制通知栏的启用和禁用:

adb shell am broadcast -a com.android.jarvis.statusbar --es setstatus [enable|
相关文章
|
2月前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
3月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
3月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
95 15
Android 系统缓存扫描与清理方法分析
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
41 1
|
2月前
|
存储 监控 前端开发
如何确保测试脚本的稳定性和可靠性?
确保测试脚本的稳定性和可靠性是保证性能测试结果准确有效的关键
|
3月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
176 32
|
3月前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
108 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
97 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
4月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
59 2

热门文章

最新文章