zoukankan      html  css  js  c++  java
  • selenium WebDriverWait 重写子类,赋值真实异常message

    selenium.webdriver.support.wait.WebDriverWait
    """
    参数
    ignored_exceptions=None
    """

        def until(self, method, message=''):
            """Calls the method provided with the driver as an argument until the 
            return value does not evaluate to ``False``.
    
            :param method: callable(WebDriver)
            :param message: optional message for :exc:`TimeoutException`
            :returns: the result of the last call to `method`
            :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
            """
            screen = None
            stacktrace = None
    
            end_time = time.time() + self._timeout
            while True:
                try:
                    value = method(self._driver)
                    if value:
                        return value
                except InvalidSelectorException as e:
                    raise e
                except self._ignored_exceptions as exc:
                    screen = getattr(exc, 'screen', None)
                    stacktrace = getattr(exc, 'stacktrace', None)
                time.sleep(self._poll)
                if time.time() > end_time:
                    break
            raise TimeoutException(message, screen, stacktrace)
    ignored_exceptions:默认值是 NoSuchElementException,当存在此异常时,会忽略,直到达到设置的 timeout超时时间
    这里有一个弊端,当达到超时时间后,会抛出 TimeoutException,并且message只能打印传入值,不会打印实际 NoSuchElementException的值,没有参考价值
    运行日志:
    Traceback (most recent call last):
      File "D:web_keys_datadriverweb_keyskeys.py", line 106, in locate
        return self.web_el_wait(name, value)
      File "D:web_keys_datadriverweb_keyskeys.py", line 82, in web_el_wait
        EC.visibility_of_element_located((name, value)), "web_el_wait方法定位元素异常:")
      File "D:web_keys_datadriverweb_keysweb_wait.py", line 42, in until
        raise TimeoutException(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: web_el_wait方法定位元素异常:
    Stacktrace:


    可以重写WebDriverWait,代码如下
    class WebDriverWaitExtend(WebDriverWait):
        def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
            super(WebDriverWaitExtend, self).__init__(driver, timeout, poll_frequency, ignored_exceptions)
    
        def until(self, method, message=None):
            """Calls the method provided with the driver as an argument until the 
            return value does not evaluate to ``False``.
    
            :param method: callable(WebDriver)
            :param message: optional message for :exc:`TimeoutException`
            :returns: the result of the last call to `method`
            :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
            """
            screen = None
            stacktrace = None
    
            end_time = time.time() + self._timeout
            while True:
                try:
                    value = method(self._driver)
                    if value:
                        return value
                except InvalidSelectorException as e:
                    raise e
                except self._ignored_exceptions as exc:
                    # screen = getattr(exc, 'screen', None)
                    # stacktrace = getattr(exc, 'stacktrace', None)
                    # 新增错误异常信息
                    message += getattr(exc, 'msg', None)
                time.sleep(self._poll)
                if time.time() > end_time:
                    break
            raise TimeoutException(message, screen, stacktrace)
    运行日志:
    Traceback (most recent call last):
      File "D:web_keys_datadriverweb_keyskeys.py", line 106, in locate
        return self.web_el_wait(name, value)
      File "D:web_keys_datadriverweb_keyskeys.py", line 82, in web_el_wait
        EC.visibility_of_element_located((name, value)), "web_el_wait方法定位元素异常:")
      File "D:web_keys_datadriverweb_keysweb_wait.py", line 42, in until
        raise TimeoutException(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: web_el_wait方法定位元素异常:Unable to locate element{"method""css selector","selector""[name="accounts1"]"}(Session infochrome=71.0.3578.
    98)



  • 相关阅读:
    Linux——k8s命令别名修改
    k8s—centos7安装部署NFS服务器和客户端及基于nfs的动态存储storageclass使用总结
    MySQL—用户和权限管控
    MySQL—常用SQL语句整理总结
    Zookeeper——入门介绍(相关原理、安装启动及使用操作)
    SpringBoot——Quartz定时框架的使用详解和总结
    SpringBoot——@Scheduled的自定义周期性线程池解决任务延时执行问题
    Linux—用户新建目录和文件的默认权限设置:umask详解
    设计模式——单例模式详解
    Linux—CPU核数、上下文切换介绍及pidstat等命令详解
  • 原文地址:https://www.cnblogs.com/martinsun/p/15512048.html
Copyright © 2011-2022 走看看