Python装饰器UI自动化当界面元素迟迟未加载出来时的灵活处理办法

Posted 淡怀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器UI自动化当界面元素迟迟未加载出来时的灵活处理办法相关的知识,希望对你有一定的参考价值。

一般异常捕获做法(不够灵活,复用性不强)

if __name__ == \'__main__\':
    # 一般做法(或者再加个循环触发)
    try:
        driver.switch_to.alert.accept()  # 有可能弹框没出来 会报错
    except:
        time.sleep(5)
        driver_.switch_to.alert.accept()

加了装饰器的做法(及其灵活,复用性强)

def loop_waiting(seconds=1, times=1):
    """
    循环等待触发
    常用场景(UI自动化):当页面未加载完成时driver直接找元素 可能会报错 等待一段时间后 页面加载完成后再去找
    :param seconds: 每次循环等待秒数
    :param times: 循环次数
    :return:
    """

    def wrapper(func):
        def inner_wrapper():
            for i in range(times):
                try:
                    func()
                    break
                except:
                    print(f\'循环等待触发{times}次,每次等待{seconds}秒,当前第{i + 1}次\')
                    time.sleep(seconds)

        return inner_wrapper

    return wrapper


if __name__ == \'__main__\':
    # 加了装饰器的做法
    @loop_waiting(5, 3)  # 循环触发3次,每次等待5秒
    def alert_accept():
        driver.switch_to.alert.accept()  # 有可能弹框没出来 会报错

    alert_accept()

 

以上是关于Python装饰器UI自动化当界面元素迟迟未加载出来时的灵活处理办法的主要内容,如果未能解决你的问题,请参考以下文章

Python 迭代器与生成器及装饰器

装饰器作为弹出窗口不起作用

python如何实现元素等待

解决使用@wraps装饰器,但是仍然未消除装饰器产生的副作用问题

Python装饰类中的方法和继承

[TimLinux] Python 装饰器