51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2076|回复: 1
打印 上一主题 下一主题

UI自动化测试-弹窗处理

[复制链接]
  • TA的每日心情
    无聊
    7 小时前
  • 签到天数: 528 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2019-1-2 15:34:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    最近在解决历史遗留问题-弹窗,也是感触颇多。之前因为赶项目,就把弹窗问题的优先级降低了,现在到了多设备(几十台)并行执行,弹窗问题就变成了当务之急了。那么,先看看弹窗类型:安装弹窗、系统弹窗、应用内部弹窗。一般来说需要处理的是这三种类型的弹窗。


    • 安装弹窗: 一般出现在小米手机上。安装时候会提示是否安装的弹窗;
    • 系统弹窗:启动的应用的时候,系统会弹GPS、获取联系人信息之类的弹窗。这个要具体问题具体分析,要看你应用需要获取哪些权限 ;
    • 应用内部弹窗:使用应用的过程中出现的弹窗

    在安装弹窗中需要处理的有:1.Appium默认安装的apk弹窗,2.安装被测应用时出现的弹窗。如何处理这类型的弹窗?我们的处理方法是交给UI框架去处理。


    • 把appium运行时需要安装的settings_apk_debug.apk与unlock_apk_debug.apk这两个APK抽取出来又UI框架去安装,这两个APK安装时候出现的弹窗由UI框架处理,处理方式是:线程,一边安装一边检测是否有弹窗。
    1. def install_unlock_apk(device,useless):
    2.     # the unlock_apk path
    3.     unlock_apk_path = the_path + os.path.join(os.path.sep, "TEST", "bin", "unlock_apk-debug.apk")
    4.     packageList = []
    5.     packages = os.popen('adb -s {0} shell pm list packages'.format(device))
    6.     for package in packages:
    7.         packageName = package.split(':')[-1].splitlines()[0]
    8.         packageList.append(packageName)

    9.     if 'io.appium.unlock' not in packageList:
    10.         os.popen('adb -s {0} install {1}'.format(device, unlock_apk_path))
    11. def protect(device,useless):

    12.      path_to_jar = the_path + os.path.join(os.path.sep,"TEST","data","xiaomiJar.jar")
    13.      os.popen('adb -s {0} push {1} /data/local/tmp' .format(device, path_to_jar))
    14.      os.popen('adb -s {0} shell uiautomator runtest  xiaomiJar.jar --nohup -c  com.ppmoney.testcases.InstallButtonClicker' .format(device))
    15. install_unlock_apk = threading.Thread(target=install_unlock_apk, args=(device, ""))
    16. protect1 = threading.Thread(target=protect, args=(device, ""))
    复制代码
    • 备注:这里需要用到jar包,这个jar包是具体的处理弹窗的方法。由于python没有自带的uiautomator库,所以用回Java去处理,总得来说,弹窗是由uiautomator去处理。

    • 被测应用的安装也由UI框架去处理,appium不负责安装应用,安装时出现的弹窗也由UI框架去处理,处理方式是:线程,一边安装一边检测是否有弹窗:
    1. install = threading.Thread(target=install_apk, args=(device, apk))
    2. protect3 = threading.Thread(target=protect, args=(device, ""))
    复制代码
    系统弹窗:启动应用时,出现的权限弹窗。处理方式:启动应用之后,去判断弹窗是否存在,如果存在就点击,不存在就开始执行用例。
    1. def click_shoot_windows(self):

    2.          try:

    3.             els = self.driver.find_elements_by_class_name('android.widget.Button')
    4.             for el in els:
    5.                 if el.text == u'允许':
    6.                     self.driver.find_element_by_android_uiautomator('new UiSelector().text("允许")').click()
    7.                 elif el.text == u'始终允许':
    8.                     self.driver.find_element_by_android_uiautomator('new UiSelector().text("始终允许")').click()
    9.                 elif el.text == u'确定':
    10.                     self.driver.find_element_by_android_uiautomator('new UiSelector().text("确定")').click()
    11.          except:

    12.              pass
    复制代码
    应用内部:同上处理方式。用例执行的时候,一边执行一边判断是否有弹窗。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 17:29 , Processed in 0.062498 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表