Клики и ввод
Найти элементы — полдела. Теперь научимся действовать: печатать, нажимать, отмечать флажки и выбирать из списков.
Ввод текста
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, если элемента или варианта нет.