阅读本文大约需要1分钟。
背景
在Android自动化测试执行过程中,经常会由于这样或那样的原因导致手机屏幕被锁定从而导致测试失败,如果你使用的是Appium或者Airtest这样的框架,框架中自带了点亮并解锁屏幕的API,但如果是使用的自研框架或者是u2框架,就需要自己去实现这个功能了。
解锁屏幕
在uiautomator2.0中有两个方法:
以上两个方法并不能实现解锁屏幕功能,想要实现解锁屏幕还是需要借助辅助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
分享:最近看了全球软件质量&效能大会QECon的演讲,感觉内容还是不错的,想要PPT的可以关注本公众号,然后输入"QECon"不区分大小写,获取2021年QECon大会的全场PPT
些道理,遇见些有趣的事 —— 离岛