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

How to use WebDriverWait in an if statement for multiple elements efficiently?

假设我有 3 个不同的场景,在这些不同的场景中显示了不同的元素。

如何将 WebDriverWait 用于多个元素,如果找到其中一个元素,则忽略其他元素的发现。

我曾尝试 WebDriverWait 休眠 x 秒,然后使用 driver.find_element_by_id 执行 if 语句并查找元素是否存在,但这是非常低效的,因为页面可以带longer/less加载,你可以看看我在下面的代码中试过的:

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

为了等到出现三个元素之一,您可以使用以下 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 case:

if(is_first_element_present):
   do_something
elif(is_second_element_present):
   do_that
   -----
etc