t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как можно ожидать текст который должен появиться в Select

Теги: #<Tag:0x00007f7488fbde58> #<Tag:0x00007f7488fbdd68> #<Tag:0x00007f7488fbdc50>

Привет всем,
У меня такая ситуация, я должен выбрать название города, после того как я выбираю страну. Проблема в том, что я должен ждать пока загрузится список городов выборной страны. Как я могу ожидать без time.sleep?

time.sleep(2)
select_country = Select(self.browser.css("#country_id"))
select_country.select_by_visible_text("Россия")
time.sleep(2)
select_city = Select(self.browser.css("#city_id"))
select_city.select_by_visible_text("Москва")

http://selenium-python.readthedocs.io/waits.html

Раздел expected conditions

Допустим ваш HTML что-то вроде такого вначале:

<select #country_id>

</select>

И тут в нем начинают подгружатся опции:

<select #country_id>
    <option>Россия</option>
    <option>Украина</option>
    <option>Беларусь</option>
</select>

Получается вам нужно ждать элемент по его видимому тексту. К счастью есть Explicit Waits, и специальный кондишн text_to_be_present_in_element

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.text_to_be_present_in_element((By.css, 'select#country_id option'), 'Россия'))
1 Симпатия

Спасибо помагло!