App自动化测试设备弹窗处理
前言
在appium自动化测试过程中部分设备会存在各种状况影响自动化脚本的执行。如设备锁屏,安装时权限弹窗处理等等(oppo和vivo设备安装app时需要进行弹窗确认,还需要输入密码) 那么该如何处理这些设备的的状态来保证自动化运行的成功率?
其实我们可以使用adb命令来处理,比如检测失败是否亮屏,点亮屏幕,点击弹窗、滑动操作、输入密码、切换输入法操作等等。下面我们将一一展示其用法。
屏幕状态
oppo/vivo机型系统目前不允许设置设备屏幕一直保持常亮,最多30分钟就会休眠,我们可以使用adb来检测屏幕状态,根据屏幕状态来进行对应的操作。
屏幕状态检测
使用如下命令可以检测屏幕是否休眠,mAwake=true
说明设备是未休眠的,如果 mAwake=false
说明设备是休眠状态。
1 | adb shell "dumpsys window policy | grep mAwake" |
注意:部分机型返回的可能和上面的结果有差异,如华为和小米机型的返回结果有一些不同,返回结果样式一般如下:
1 | mAwake=truemScreenOnEarly=true mScreenOnFully=true |
屏幕激活
如果设备是休眠状态我们需要点亮屏幕,使用下面命令可以点亮屏幕。
1 | adb shell input keyevent 26 |
26
表示电源键,上面的命令表示按电源键把设备屏幕点亮。其实adb还可以模拟其他按键操作详见: keyevent code详解
屏幕解锁
设备屏幕点亮之后可能还需要向上滑动或者输入密码解锁,adb可以模拟滑动和点击操作
1 | adb shell input swipe 540 2270 540 240 100 #滑动操作 |
swipe
后面的数字分别是滑动起点的坐标和终点的坐标,最后一个数字是滑动持续的时间,单位:毫秒 tap
后面的是点击位置的坐标,坐标获取可以在开发者选项中开启指针位置即可获得。
安装弹窗
安装app过程中出现权限弹窗或者需要输入密码的场景该如何处理?其实我们可以使用多线程来处理,一个线程负责执行安装命令,另外一个线程处理弹窗即可。
安装
我们先定义一个安装app的方法install_app()
1 | import subprocess |
弹窗处理
然后定义一个方法install_dialog_handle()
用于处理安装过程中的弹窗,这里是以oppo k1机型为例。adb shell input text
命令是用于在弹出的输入框输入安装密码
1 | import subprocess |
多线程处理安装过程中弹窗
最后我们定义一个方法install_action()
使用多线程把上面2个方法加载进来
1 | import threading |
除了使用adb来处理安装过程中的弹窗,还可以使用其他方法处理,具体可以参考:appium+python自动化47-app权限弹窗问题
输入法切换
自动化测试过程中经常会把系统默认输入法切换为appium输入法,但是运行完脚本之后我们需要把输入法切换为系统的默认输入法(appium输入法没有界面,不切换我们无法正常输入),我们依旧可以使用adb命令来切换。
首先可以使用如下命令查看设备的输入法
1 | adb shell ime list -s |
然后使用如下命令即可切换输入法
1 | adb shell ime set io.appium.settings/.UnicodeIME #修改为appium输入法 |
注意:部分设备系统由于WRITE_SECURE_SETTINGS
安全权限限制,如oppo R15执行命令修改无效,需要root设备后才能修改生效。