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

简介: 在Android自动化测试执行过程中,经常会由于这样或那样的原因导致手机屏幕被锁定从而导致测试失败,如果你使用的是Appium或者Airtest这样的框架,框架中自带了点亮并解锁屏幕的API,但如果是使用的自研框架或者是u2框架,就需要自己去实现这个功能了。

解锁屏幕


在uiautomator2.0中有两个方法:

  • isScreenOn:只能判断屏幕是亮着的还是关着的,屏幕锁屏时 isScreenOn 还是会返回 true;
  • wakeUp:只能把屏幕唤醒点亮并不能解锁屏幕;


以上两个方法并不能实现解锁屏幕功能,想要实现解锁屏幕还是需要借助辅助APP,Appium和Airtest框架都是通过自带的辅助APP实现解锁屏幕功能的。


定义解锁Activity

package com.android.jarvis
import android.app.Activity
import android.app.KeyguardManager
import android.os.Bundle
import androidx.core.view.accessibility.AccessibilityEventCompat
class IdentityActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ensureVisibility()
    }
    private fun ensureVisibility() {
        val window = window
        window.addFlags(2097152)
        window.addFlags(AccessibilityEventCompat.TYPE_WINDOWS_CHANGED)
        unlock()
        val params = window.attributes
        params.screenBrightness = 0.2f
        window.attributes = params
    }
    private fun unlock() {
        (getSystemService("keyguard") as KeyguardManager).newKeyguardLock("InputService/Unlock")
            .disableKeyguard()
    }
}

在AndroidManifest.xml中注册Activity

 <activity
            android:name=".IdentityActivity"
            android:exported="true"
            android:finishOnTaskLaunch="true"
            android:stateNotNeeded="true"
            android:screenOrientation="portrait"
            android:excludeFromRecents="true"
            android:noHistory="true">
            <intent-filter>
                <action android:name="com.android.jarvis.action.ACTION_IDENTIFY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

在AndroidManifest.xml中申请权限

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

执行下面的命令即可实现解锁屏幕:

adb shell am start -a com.android.jarvis.action.ACTION_IDENTIFY
相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
48 4
|
3月前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
70 1
|
3月前
|
安全 测试技术
北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率
【10月更文挑战第1天】北京大学李戈教授团队提出了一种名为“统一生成测试”的创新方法,有效提升了大模型如GPT-2和GPT-3在单一测试中的代码生成覆盖率,分别从56%提升至72%和从61%提升至78%。这种方法结合了模糊测试、变异测试和生成对抗网络等多种技术,克服了传统测试方法的局限性,在大模型测试领域实现了重要突破,有助于提高系统的可靠性和安全性。然而,该方法的实现复杂度较高且实际应用效果仍需进一步验证。论文可从此链接下载:【https://drive.weixin.qq.com/s?k=ACAAewd0AA48Z2kXrJ】
87 1
|
3月前
|
测试技术 UED
软件测试中的“灰盒”方法:一种平衡透明度与效率的策略
在软件开发的复杂世界中,确保产品质量和用户体验至关重要。本文将探讨一种被称为“灰盒测试”的方法,它结合了白盒和黑盒测试的优点,旨在提高测试效率同时保持一定程度的透明度。我们将通过具体案例分析,展示灰盒测试如何在实际工作中发挥作用,并讨论其对现代软件开发流程的影响。
|
3月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
95 15
Android 系统缓存扫描与清理方法分析
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
41 6
|
2月前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
55 6
|
2月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
338 2
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
108 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
97 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法

热门文章

最新文章