假设我有 3 个不同的场景,在这些不同的场景中会显示不同的元素。
如何将
WebDriverWait
用于多个元素,并且如果找到其中一个元素,则忽略其他元素的发现。
我尝试过
WebDriverWait
休眠 x
秒数,然后使用 driver.find_element_by_id
执行 if 语句并查找元素是否存在,但这效率非常低,因为页面可能需要更长/更少的时间来加载,您可以看看我在以下代码中尝试过的内容:
WebDriverWait(driver, 30)
if len(driver.find_elements_by_id('something1')) > 0:
*do something*
elif len(driver.find_element_by_id('something2')) > 0:
*do something*
elif len(driver.find_element_by_id('something3')) > 0:
*do something*
我还尝试了
WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.ID, 'something')))
与 try
和 except
但这是效率最低的方法,因为它需要更长的时间。
为了等到三个元素之一出现,您可以使用以下
ExpectedConditions
示例,因为ExpectedConditions
支持多个参数。element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "first_element_id, second_element_id, third_element_id"))
现在,如果您需要知道存在什么元素,不存在什么元素,最简单的方法是使用
driver.find_elements
is_first_element_present = driver.find_elements_by_id(first_element_id)
is_second_element_present = driver.find_elements_by_id(second_element_id)
is_third_element_present = driver.find_elements_by_id(third_element_id)
现在,每个元素都是一个列表。如果元素存在,则列表不为空;如果元素不存在,则列表为空。 由于非空列表在 Python 中是布尔值
True
,空列表是 False
,因此您可以直接将其与 if
一起使用:
if(is_first_element_present):
do_something
elif(is_second_element_present):
do_that
-----
etc
我尝试过,但收到此错误:发生错误:presence_of_element_ located() 需要 1 个位置参数,但给出了 2 个