【自动化】获取手机的屏幕状态

只有拥有坐上牌桌的能力,才有博弈的机会...

可能在Android测试过程中有很多需要获取的元素,比如这个手机的屏幕状态,除了可以用开发APK API(Java)实现获取锁屏状态外也可以通过adb命令获取手机是否锁屏状态,当然这种使用的adb的方式可以用python来封装。

对于手机各种数据的获取,一般要么来自静态配置文件,要么来自动态的service动态数据

手机屏幕状态这种动态的可以通过一个window的服务来获取,执行指令:
adb shell dumpsys window policy | findstr isStatusBarKeyguard   (守卫者状态:电源键)
adb shell dumpsys window policy | findstr mShowingLockscreen  (显示锁定屏幕)
已解锁状态值:  
isStatusBarKeyguard=false  (true时:手机锁屏;false时:手机解锁)
mShowingLockscreen=true       (true时:手机锁屏;false时:手机解锁)
如果出现以上2指令有一条指令输出值空,一般不会出现空置的情况,如果有可以通过下面截图中的几个字段:

【自动化】获取手机的屏幕状态_第1张图片

【自动化】获取手机的屏幕状态_第2张图片

【自动化】获取手机的屏幕状态_第3张图片

代码实现:
   def is_screen_locked(self, sno):
        """
        查看当前手机屏幕是什么状态:锁屏(0,1) * 亮黑(0,1)
        三种情况需要考虑
        2:黑屏上锁、0:亮屏解锁、1:亮屏上锁
        四种情况去考虑就是有无锁、是否亮屏,我觉得还是按其中来吧
        10:锁黑、11:锁亮、01:开亮、00:开黑
        adb shell dumpsys window policy | grep isStatusBarKeyguard 确认是否有锁
        adb shell dumpsys window policy | grep ScreenOn 是否亮屏
        """
        window_policy = self.shell(sno, "dumpsys window policy").stdout.read()
        locked_status = re.findall(r"isStatusBarKeyguard=(\w+)", window_policy)[0]
        bright_status = re.findall(r"mScreenOnFully=(\w+)", window_policy)[0]

        if locked_status == 'true' and bright_status == 'true':
            return "11"
        elif locked_status == 'true' and bright_status == 'false':
            return "10"
        elif locked_status == 'false' and bright_status == 'false':
            return "00"
        elif locked_status == 'false' and bright_status == 'true':
            return "01"

备注:整理笔记,发现新问题



你可能感兴趣的:(Android,Python,AutoTesting,自动化测试)