Тема 3 из 6

Клики и ввод

Найти элементы — полдела. Теперь научимся действовать: печатать, нажимать, отмечать флажки и выбирать из списков.

Ввод текста

from selenium.webdriver.common.keys import Keys

field = driver.find_element(By.NAME, "q")
field.clear()                          # стереть то, что было
field.send_keys("курс доллара")        # напечатать
field.send_keys(Keys.ENTER)            # нажать Enter
  • send_keys печатает так, как будто человек нажимает клавиши, и дописывает к тому, что уже есть в поле. Поэтому сначала clear();
  • клавиши — Keys.ENTER, Keys.TAB, Keys.ESCAPE, Keys.BACKSPACE, стрелки; их можно склеивать с текстом: send_keys("текст" + Keys.ENTER);
  • значение поля — field.get_attribute("value").

Нажатия

driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

click() нажимает на элемент. Для флажков (checkbox) клик переключает состояние, поэтому сначала смотрят is_selected():

if checkbox.is_selected() != should_be_on:
    checkbox.click()

Переключатели (radio) кликают просто по нужному варианту — остальные в группе снимутся сами.

Выпадающие списки

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.ID, "city"))
select.select_by_visible_text("Казань")    # по тексту, который видит человек
select.select_by_value("kzn")              # по атрибуту value
select.select_by_index(2)                  # по номеру
select.first_selected_option.text          # что выбрано сейчас
[o.text for o in select.options]           # все варианты

У варианта бывает видимый текст («Казань») и скрытый value («kzn») — это разные вещи. Если варианта нет, select_by_… бросает NoSuchElementException.

Итог

  • clear(), затем send_keys(...), Keys.ENTER;
  • click(); флажки — сначала is_selected();
  • Select: select_by_visible_text, select_by_value, first_selected_option;
  • NoSuchElementException, если элемента или варианта нет.