📅  最后修改于: 2023-12-03 14:47:22.519000             🧑  作者: Mango
在使用 Selenium 进行网页自动化测试时,有可能会遇到一些元素需要等待一段时间才能出现,或者出现后仅能短暂存在,然后又会消失。这时,我们需要找到一种方法来定位这些消失的元素。
Selenium 提供了一些等待方法,用于等待元素的出现。
显式等待是指使用 Selenium 提供的 WebDriverWait
类来等待指定的元素出现。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素出现,等待时间为 10 秒
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
在上面的代码中,我们使用了 WebDriverWait
类来等待元素出现,等待时间为 10 秒。EC.presence_of_element_located
方法用来判断元素是否存在。如果元素存在,则将其赋值给 element
变量。
隐式等待是指使用 driver.implicitly_wait
方法来等待元素的出现。
from selenium import webdriver
# 设置隐式等待时间为 10 秒
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 到达某个页面,等待元素出现
在上面的代码中,我们设置了隐式等待时间为 10 秒。如果在等待时间内元素没有出现,Selenium 将会抛出 NoSuchElementException
异常。
当我们需要等待某个元素消失时,可以通过以下两种方法来实现。
显式等待的方式与等待元素出现的方式相似。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素消失,等待时间为 10 秒
WebDriverWait(driver, 10).until_not(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
在上面的代码中,我们使用了 WebDriverWait
类来等待元素消失,等待时间为 10 秒。EC.presence_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
# 自定义等待元素消失
def wait_for_element_disappear(by, identifier, timeout=10):
locator = (by, identifier)
def _not_found(driver):
try:
driver.find_element(*locator)
return False
except:
return True
WebDriverWait(driver, timeout).until(_not_found)
# 等待元素消失,等待时间为 10 秒
wait_for_element_disappear(By.ID, "myDynamicElement", 10)
在上面的代码中,我们自定义了一个名为 wait_for_element_disappear
的方法,用来等待元素消失。我们使用了 WebDriverWait
类和 find_element
方法来实现此功能。
在本文中,我们介绍了使用 Selenium 如何找到消失的元素。我们探讨了等待元素出现的方式,包括显式等待和隐式等待,同时也介绍了等待元素消失的方式,包括显式等待和自定义等待。这些方法将有助于我们更好地处理一些需要等待的元素。