如何全局重写WebDriverWait的IGNORED_EXCEPTIONS默认值?
全局修改WebDriverWait默认忽略异常的可行方案
你可以通过两种方式实现全局修改WebDriverWait的默认忽略异常,解决每次显式指定的麻烦:
方法一:直接修改模块全局变量(需注意执行时机)
WebDriverWait初始化时会读取模块内的IGNORED_EXCEPTIONS元组,只要在所有WebDriverWait实例创建之前修改这个变量,就能生效。
在项目启动的入口文件(如main.py或根目录__init__.py)中执行以下代码:
from selenium.webdriver.support.wait import IGNORED_EXCEPTIONS from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException, NoSuchFrameException # 替换默认的忽略异常集合 IGNORED_EXCEPTIONS = (NoSuchElementException, StaleElementReferenceException, NoSuchFrameException)
为什么之前的尝试可能失效?
你之前的代码可能存在执行时机问题——如果修改操作在某个WebDriverWait实例创建之后才执行,那该实例初始化时已经使用了原默认值,不会受到后续修改的影响。
方法二:子类化WebDriverWait(更稳妥,避免全局污染)
如果担心全局修改会影响其他依赖默认异常集合的代码,可以自定义子类封装默认配置:
from selenium.webdriver.support.wait import WebDriverWait from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException, NoSuchFrameException class CustomWebDriverWait(WebDriverWait): def __init__(self, driver, timeout, poll_frequency=0.5, ignored_exceptions=None): # 定义自定义默认忽略异常 default_ignored = (NoSuchElementException, StaleElementReferenceException, NoSuchFrameException) # 合并自定义传入的异常(如果有的话) if ignored_exceptions is None: ignored_exceptions = default_ignored elif isinstance(ignored_exceptions, tuple): ignored_exceptions = default_ignored + ignored_exceptions else: ignored_exceptions = default_ignored + (ignored_exceptions,) super().__init__(driver, timeout, poll_frequency, ignored_exceptions)
之后直接使用子类替代原生WebDriverWait即可:
return CustomWebDriverWait(self.browser, 10).until(EC.visibility_of_element_located((By.ID, 'ID')))
内容的提问来源于stack exchange,提问作者Brian Mitchell
相关产品推荐
相关产品推荐

