📅  最后修改于: 2023-12-03 15:24:22.710000             🧑  作者: Mango
在使用 Selenium Python 进行测试时,我们经常需要检查网页上是否存在某些特定的元素。但是,有时候这些元素可能未被正确加载或渲染,那么如何判断元素是否可见呢?下面将介绍几种方法。
Selenium 内置了许多 Expected Conditions,可以用于等待特定条件的出现,其中就包括等待某个元素可见。这个方法非常简单,只需要从 selenium.webdriver.support.expected_conditions
中导入 visibility_of_element_located
,然后传入元素的定位符即可。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 获取 webdriver 实例 driver
# 等待元素加载完毕并可见
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myElement"))
)
# 对元素进行操作
element.click()
如果不想使用 Expected Conditions,我们可以检查元素自身的某些属性来判断是否可见。下面是一些常见的属性:
is_displayed()
:如果元素可见,则返回 True
,否则返回 False
。size
:返回元素的宽度和高度,如果元素不可见或未被加载,则返回 (0
, 0
)。location
:返回元素的左上角在页面上的坐标,如果元素不可见或未被加载,则返回 (0
, 0
)。# 获取元素对象
element = driver.find_element_by_id("myElement")
# 检查元素可见性
if element.is_displayed():
# 对元素进行操作
element.click()
else:
# 等待元素加载
WebDriverWait(driver, 10).until(lambda d: element.is_displayed())
第三种方式不直接检查元素是否可见,而是使用 Selenium 的异常捕获机制。在默认情况下,Selenium 在查找元素失败时会抛出 NoSuchElement Exception,我们可以在捕获这个异常时等待元素加载完毕。
from selenium.common.exceptions import NoSuchElementException
try:
# 获取元素对象
element = driver.find_element_by_id("myElement")
# 对元素进行操作
element.click()
except NoSuchElementException:
# 等待元素加载
WebDriverWait(driver, 10).until(lambda d: d.find_element_by_id("myElement").is_displayed())
# 获取元素对象
element = driver.find_element_by_id("myElement")
# 对元素进行操作
element.click()
以上三种方式都可以检查网页上是否可见元素,其中第一种方法使用较广泛。三种方法各有优缺点,程序员可以选择各种方法结合使用,来达到最好的效果。