Фактический результат: открывается страница hotline.ua, пока автотест открывает окно с выбором города, строка поиска заполняется быстрее чем выбор города. После выбора города страница перезагружается, и поисковая строка возвращается в исходное состояние.
Это надо (но не желательно пользоваться этим от слова совсем) устанавливать один раз
Запустил у себя и понял что вы не ждете явно всплывающего окна с городами. Используйте WebDriverWait класс в сочетании с expected_conditions классом чтобы удостовериться в появлении окна с выбором города. Потом уже выбирайте город и продолжайте тест.
Можете вот так реализовать:
from selenium.webdriver.support.ui import WebDriverWait as WDWait
from selenium.webdriver.support import expected_conditions as EC
def wait_and_get_element(self, element: str, timeout=15, loc_type='xpath', by_locator=False):
locator = element if by_locator else self.locators[element]
timeout = self.waiting_timeout if self.waiting_timeout else timeout
WDWait(self.driver, timeout).until(
EC.presence_of_element_located((loc_type, locator))
)
return self.driver.find_element(loc_type, locator)
Вот вам еще на будущее, поможет в ожидании чего либо:
def wait_for(condition, timeout=300, interval=5, error_message=None):
"""
Функция ожидает пока condition не станет True, иначе кидает исключение по таймауту
:param condition: какая-либо лямбда, выполняется в теле цикла
:param timeout: максимально допустимое время ожидания (сек)
:param interval: интервал проверок (сек)
:param error_message: сообщение об ошибке, если требуется
"""
raise_time = int(time() + timeout)
while int(time()) < raise_time:
if condition():
return
sleep(interval)
raise TimeoutError(error_message)