使用显式等待进行异常cover,报错:元素过期

进行web自动化时频繁在某个元素上遇到报错异常:元素过期

原因

  1. 页面仍在进行JS加载或者仍在进行刷新
  2. 诸如下拉菜单,展开二级菜单之类的元件在点击展开后,到完全展开二级菜单时,对二级菜单的选项进行定位大概率会出现元素过期

解决

  1. 使用显式等待并且往wait对象的参数ignore_expected 中添加过期异常。
  2. 使用显式等待,自定义method,将条件设置为等待js脚本加载完毕

示例

添加忽略的异常

# 自定义忽略异常列表
ignored_exceptions = (NoSuchElementException, StaleElementReferenceException, TimeoutException)

# 使用 WebDriverWait 并忽略自定义异常
WebDriverWait(self.driver, 10, ignored_exceptions=ignored_exceptions).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".el-menu>div:nth-child(3)>li>.el-submenu__title"))
).click()

自定义条件,以JS脚本加载完毕为分界点

wait.until(lambda driver : driver.execute_script('return document.readyState')=='complete')