如何在多个元素的 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')))
与 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
case:
if(is_first_element_present):
do_something
elif(is_second_element_present):
do_that
-----
etc
假设我有 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')))
与 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
case:
if(is_first_element_present):
do_something
elif(is_second_element_present):
do_that
-----
etc