Вы можете объединить две проверки в одной операции wait()
- используя лямбда-выражение python, склеив две проверки вместе с or
:
# the imports for expected_conditions and By modules
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait.until(lambda x: EC.presence_of_element_located((By.ID, "id1")) or EC.presence_of_element_located((By.ID, "id2")))
Вы можете использовать этот подход даже для того, чтобы получить элемент, который сопоставляется первым - или, если вы не хотите использовать ExpectedConditions
:
element = wait.until(lambda x: x.find_elements_by_id("id1") or x.find_elements_by_css_selector("#id2"))[0]
Этот подход дает преимущество, когда ожидание прекратится сразу после одного из двух проходов - например, скорость.
По сравнению с блоком try-catch - в нем должно произойти сбой первого условия (ожидание до X секунд, обычно 10), для проверки второго; поэтому, если первое значение равно false, а второе - значение true, время выполнения / ожидания будет составлять не менее X секунд плюс время, необходимое для второй проверки.
В худшем случае, когда оба значения ложные, вы ожидаете 2-кратного ожидания по сравнению с X при их объединении. Если вы добавите другие условия, вы только увеличите коэффициент.