app自动化测试——app弹窗异常处理

在这里插入图片描述



运行过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等)
弹框不是 BUG(UI 界面提示,警告的作用)

一、异常弹窗展示

在这里插入图片描述

二、黑名单处理流程:

在这里插入图片描述

三、黑名单处理代码:

在执行自动化测试过程中,当通过find方法去查找某一个元素的时候,如果异常弹窗出现,会出现找不到元素的异常,这时需要将关闭弹窗的定位元素加入到黑名单black_list列表中。
通过try…except,如果找不到要定位的元素,遍历黑名单列表,判断是否有异常元素,如果有异常元素,关闭掉;紧接着继续去找业务元素,如果业务元素还是没有找到,则继续遍历黑名单中的元素,并且关闭掉;如果当黑名单中元素遍历完后,还是没有找到业务元素,则说明是没有找到元素,会报NoSuchElement报错。

    def find(self,by,locator):
        try:
            return self.driver.find_element(by,locator)
        except Exception as e:
            print('没有找到元素,处理异常')
            for black in self.black_list:
                #查找黑名单中的每一个元素
                elements=self.driver.find_elements(*black)
                if len(elements)>0:
                    elements[0].click()
                    return self.find(by,locator)
            #todo 遍历完黑名单之后,如果仍然没有找到元素,就抛出异常
            raise e

四、装饰器优势

对原有函数的功能增强
不改变原有函数的逻辑
使代码更简洁、易维护

class BasePage:

    def __init__(self,driver=None):    #加WebDriver代码就有提示了
        self.driver=driver

    @black_wrapper
    def find(self,by,locator):
        return self.driver.find_element(by, locator)

find方法传递给装饰器black_wrapper(func),也就是说装饰器中的func表示find方法。
find方法中的参数self,by,locator传递给装饰器中的run方法中的 *args
self可以通过self = args[0]获取

import time
import logging
import os
import allure
from appium.webdriver.common.appiumby import AppiumBy



# todo 黑名单列表
black_list = [(AppiumBy.ID, "com.xueqiu.android:id/ib_close")]


# todo func相当于find方法
def black_wrapper(func):
    def run(*args, **kwargs):
        from base.base_page import BasePage
        basepage:BasePage = args[0]
        try:
            logging.info(f"开始查找元素{args[2]}")
            return func(*args, **kwargs)
        except Exception as e:
            logging.warning("为找到元素,处理异常")
            # 以当前时间命名的截图
            curtime=basepage.get_time()
            tmp_name=curtime+'.png'
            #todo  获取当前文件black_handle.py所在的路径
            # os.path.dirname(__file__)
            # 上一级路径与当前路径进行拼接
            tmp_name=os.path.join(os.path.dirname(__file__),'..','images',tmp_name)
            logging.info(f"当前截图的路径为————————》:{tmp_name}")
            basepage.screenshot(tmp_name)
            #todo 截图添加到测试报告中
            allure.attach.file(tmp_name,
                               name="截图",
                               attachment_type=allure.attachment_type.PNG)

      
            for black in black_list:
                # 查找黑名单中的每一个元素
                logging.warning(f"处理黑名单:{black}")
                elements = basepage.driver.find_elements(*black)
                if len(elements) > 0:
                    elements[0].click()
                    return func(*args, **kwargs)
            # todo 遍历完黑名单之后,如果仍然没有找到元素,就抛出异常
            logging.error(f"遍历黑名单,仍然未找到元素信息————》{e}")
            raise e

    return run

猜你喜欢

转载自blog.csdn.net/YZL40514131/article/details/130543238