Логические операторы в ожидаемых условиях WebDriverWait

Я использую Python/Selenium для отправки формы, затем у меня есть веб-драйвер, ожидающий загрузки следующей страницы, используя ожидаемое условие с использованием идентификатора класса.

Моя проблема в том, что есть две страницы, которые можно отобразить, но они не имеют общего уникального элемента (который я могу найти), которого нет на исходной странице. Одна страница имеет уникальный класс mobile_txt_holder, а другая возможная страница имеет идентификатор класса notfoundcopy. Я хотел бы использовать ожидание, которое ожидает появления mobile_txt_holder ИЛИ notfoundcopy.

Можно ли объединить два ожидаемых состояния в одно ожидание?

Основная идея того, что я ищу, но, очевидно, не будет работать:

WebDriverWait(driver, 30).until(EC.presence_of_element_located(
    (By.CLASS_NAME, "mobile_txt_holder")))
    or .until(EC.presence_of_element_located((By.CLASS_NAME, "notfoundcopy")))

Мне просто нужно запрограммировать ожидание загрузки следующей страницы, чтобы я мог проанализировать исходный код.

Пример HTML:

<p class="notfoundcopy">Unfortunately, the number you entered is not in our tracking system.</p>


person Aiden    schedule 11.09.2017    source источник
comment
Возможный дубликат селектора CSS (A или B) и C?   -  person JeffC    schedule 11.09.2017
comment
@JeffC Я новичок в Python, поэтому, возможно, я ошибаюсь, но я ищу конкретный ответ на Python. Я считаю, что предоставленная вами ссылка предназначена только для CSS, а не для Python, который будет использоваться для поиска CSS.   -  person Aiden    schedule 11.09.2017
comment
С Python и Selenium вы можете использовать селектор CSS для поиска элемента. Вы можете создать селектор CSS, примеры по ссылке, который использует логику ИЛИ, чтобы вы могли получить то, что хотите.   -  person JeffC    schedule 11.09.2017
comment
@JeffC О, извини, я не понял, к чему ты клонишь. Я вижу решение DebanjanB, к которому, как я теперь вижу, вы стремились. Спасибо за помощь!   -  person Aiden    schedule 11.09.2017


Ответы (1)


Помимо объединения предложений 2 с expected_conditions по or, мы можем легко построить CSS, чтобы удовлетворить наше требование. Следующее CSS будет искать EC либо в классе mobile_txt_holder, либо в классе notfoundcopy:

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".mobile_txt_holder, .notfoundcopy"))

Вы можете найти подробное обсуждение в selenium два теста xpath в одном

person DebanjanB    schedule 11.09.2017
comment
Спасибо! Я не понял, что @JeffC пытался мне сказать. Я попробую это утром и отпишусь. Теперь это имеет смысл в моей голове. Посмотрим, смогу ли я перевести это в код завтра. - person Aiden; 11.09.2017
comment
Лучше не отвечать на вопрос, который является дубликатом. Это просто засоряет сайт большим количеством одного и того же вопроса, на который можно ответить с помощью уже размещенной дублирующей ссылки. - person JeffC; 11.09.2017