如何在 if 语句中高效地对多个元素使用 WebDriverWait?

问题描述 投票:0回答:2

假设我有 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
但这是效率最低的方法,因为它需要更长的时间。

python selenium selenium-webdriver webdriver webdriverwait
2个回答
1
投票

为了等到三个元素之一出现,您可以使用以下

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

0
投票

我尝试过,但收到此错误:发生错误:presence_of_element_ located() 需要 1 个位置参数,但给出了 2 个

© www.soinside.com 2019 - 2024. All rights reserved.