Selenium 显式等待是一种在自动化测试过程中等待某个条件成立后再继续执行后续操作的方式。与隐式等待不同的是,显式等待会在代码中明确指定要等待的条件,以及最长等待时长。当使用显式等待时,Selenium 会定期检查预期条件是否满足,直到条件成立或超过指定的最长等待时间。
在 Selenium 中,显式等待通常通过 WebDriverWait
类与 expected_conditions
模块来实现。expected_conditions
提供了多种标准的等待条件,包括但不限于以下几种:
-
元素可见(visibility_of_element_located): 这个条件用于等待某个元素不仅存在于DOM中,而且可见。可见意味着元素不仅显示在页面上,而且宽和高也都大于0。
例子:
pythonfrom selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.visibility_of_element_located((By.ID, 'element_id')))
-
元素可被点击(element_to_be_clickable): 这个条件检测一个元素不仅在DOM中,并且是可见的和可点击的。
例子:
pythonelement = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//button[@type="submit"]')))
-
元素存在(presence_of_element_located): 用于等待某个元素在DOM中存在,不考虑该元素是否可见。
例子:
pythonelement = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, 'username')))
-
元素不在DOM中或不可见(invisibility_of_element_located): 等待某个元素不在DOM中,或者在DOM中但不可见。
例子:
pythonWebDriverWait(driver, 10).until( EC.invisibility_of_element_located((By.ID, 'loading-spinner')))
显式等待使得自动化测试更为健壮,能够处理网络延迟、渲染时间等因素,使得测试结果更为可靠。它特别适合处理动态内容的页面,其中一些元素可能需要时间才能加载或变得可交互。