前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android自动化测试设备弹窗处理

Android自动化测试设备弹窗处理

作者头像
清风穆云
发布2021-08-09 10:54:43
2K0
发布2021-08-09 10:54:43
举报
文章被收录于专栏:QA一隅

前言

在appium自动化测试过程中部分设备会存在各种状况影响自动化脚本的执行。如设备锁屏,安装时权限弹窗处理等等(oppo和vivo设备安装app时需要进行弹窗确认,还需要输入密码) 那么该如何处理这些设备的的状态来保证自动化运行的成功率?

其实我们可以使用adb命令来处理,比如检测失败是否亮屏,点亮屏幕,点击弹窗、滑动操作、输入密码、切换输入法操作等等。下面我们将一一展示其用法。

屏幕状态

oppo/vivo机型系统目前不允许设置设备屏幕一直保持常亮,最多30分钟就会休眠,我们可以使用adb来检测屏幕状态,根据屏幕状态来进行对应的操作。

屏幕状态检测

使用如下命令可以检测屏幕是否休眠,mAwake=true说明设备是未休眠的,如果mAwake=false说明设备是休眠状态。

代码语言:javascript
复制
 adb shell "dumpsys window policy | grep mAwake"
    mAwake=true

注意:部分机型返回的可能和上面的结果有差异,如华为和小米机型的返回结果有一些不同,返回结果样式一般如下:

代码语言:javascript
复制
mAwake=truemScreenOnEarly=true mScreenOnFully=true

屏幕激活

如果设备是休眠状态我们需要点亮屏幕,使用下面命令可以点亮屏幕。

代码语言:javascript
复制
adb shell input keyevent 26

26表示电源键,上面的命令表示按电源键把设备屏幕点亮。其实adb还可以模拟其他按键操作详见:keyevent code详解

屏幕解锁

设备屏幕点亮之后可能还需要向上滑动或者输入密码解锁,adb可以模拟滑动和点击操作

代码语言:javascript
复制
adb shell input swipe 540 2270 540 240 100  #滑动操作 
adb shell input tap 530 2192  #点击操作

swipe后面的数字分别是滑动起点的坐标和终点的坐标,最后一个数字是滑动持续的时间,单位:毫秒 tap 后面的是点击位置的坐标,坐标获取可以在开发者选项中开启指针位置即可获得。

安装弹窗

安装app过程中出现权限弹窗或者需要输入密码的场景该如何处理?其实我们可以使用多线程来处理,一个线程负责执行安装命令,另外一个线程处理弹窗即可。

安装

我们先定义一个安装app的方法install_app()

代码语言:javascript
复制
import subprocess
def install_app(app_path):
    '''
    安装app
    :param app_path: app安装路径 
    :return:
    '''
    install_result=''
    cmd="adb  install " + app_path
    install_result = os.popen(cmd).readlines()
     

    if 'Success\n' in install_result:
        logging.info(' 设备安装成功!' ))
    else:
        logging.info('安装失败)

弹窗处理

然后定义一个方法install_dialog_handle()用于处理安装过程中的弹窗,这里是以oppo k1机型为例。adb shell input text 命令是用于在弹出的输入框输入安装密码

代码语言:javascript
复制
import subprocess

def install_dialog_handle():
    '''
    安装时设备弹窗密码处理
    
    :return:
    '''
    logging.info('安装准备进行弹窗处理')
    # oppo k1
    
    sleep(10)
   
    subprocess.call("adb  shell input text 'mgtv2018' ", shell=True) #开始输入密码
    sleep(3)
    
    subprocess.call("adb  shell input tap 756 1441", shell=True) #appium输入法安装
    subprocess.call("adb shell input tap 740 1010", shell=True) #默认输入法安装
    sleep(7)
  
    subprocess.call("adb shell input tap 508 1998", shell=True) #点击底部安装
    sleep(3)

    subprocess.call("adb  shell input tap 517 2162", shell=True) #点击底部完成

多线程处理安装过程中弹窗

最后我们定义一个方法install_action()使用多线程把上面2个方法加载进来

代码语言:javascript
复制
import threading
def install_action(app_path):
    '''
    多线程安装app,自动处理安装过程中的弹窗
    :param app_path: 安装包路径
    :return:
    '''
    threads = []

    #多线程处理弹窗
    p1 = threading.Thread(target=install_app, args=(app_path))
    threads.append(p1)
    p2 = threading.Thread(target=install_dialog_handle, args=()
    threads.append(p2)

    #执行安装操作
    for p in threads:
        p.start()
    for p in threads:
        p.join()

除了使用adb来处理安装过程中的弹窗,还可以使用其他方法处理,具体可以参考:appium+python自动化47-app权限弹窗问题

输入法切换

自动化测试过程中经常会把系统默认输入法切换为appium输入法,但是运行完脚本之后我们需要把输入法切换为系统的默认输入法(appium输入法没有界面,不切换我们无法正常输入),我们依旧可以使用adb命令来切换。

首先可以使用如下命令查看设备的输入法

代码语言:javascript
复制
adb shell ime list -s
io.appium.android.ime/.UnicodeIME
com.sohu.inputmethod.sogou/.SogouIME
com.htc.sense.ime/.HTCIMEService
io.appium.settings/.UnicodeIME

然后使用如下命令即可切换输入法

代码语言:javascript
复制
adb shell ime set io.appium.settings/.UnicodeIME #修改为appium输入法
adb shell ime set com.htc.sense.ime/.HTCIMEService #修改为系统输入法

注意:部分设备系统由于WRITE_SECURE_SETTINGS安全权限限制,如oppo R15执行命令修改无效,需要root设备后才能修改生效。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 屏幕状态
    • 屏幕状态检测
      • 屏幕激活
        • 屏幕解锁
        • 安装弹窗
          • 安装
            • 弹窗处理
              • 多线程处理安装过程中弹窗
              • 输入法切换
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档