⚖️ Старый vs Новый: стратегии поиска элементов

← К оглавлению урока

⚡ Главное изменение

Selenium 3 имел отдельные методы для каждой стратегии. Selenium 4 унифицировал всё через find_element(By.X, "val"). Старые методы удалены из Selenium 4.

# Старый способ (Selenium 3 — УДАЛЁН в Selenium 4)
driver.find_element_by_id("username")
driver.find_element_by_xpath("//button")
driver.find_elements_by_class_name("btn")

# Новый способ (Selenium 4 — актуально)
from selenium.webdriver.common.by import By
driver.find_element(By.ID, "username")
driver.find_element(By.XPATH, "//button")
driver.find_elements(By.CLASS_NAME, "btn")

Selenium 3 → Selenium 4: поиск элементов

Методы find_element_by_* и find_elements_by_* были объявлены устаревшими в Selenium 3.11 и полностью удалены в Selenium 4. В лекции могут присутствовать примеры на старом API — ниже показано современное соответствие.

Поиск по ID

Старый (из лекции — устарело)

# Selenium 3
driver.find_element_by_id("username")

Новый (Selenium 4 — актуально)

# Selenium 4
from selenium.webdriver.common.by import By
driver.find_element(By.ID, "username")

Поиск по XPath

Старый (устарело)

# Selenium 3
driver.find_element_by_xpath("//button[text()='Login']")

Новый (актуально)

# Selenium 4
driver.find_element(By.XPATH, "//button[text()='Login']")

Поиск по CSS-селектору

Старый (устарело)

# Selenium 3
driver.find_element_by_css_selector("button[type='submit']")

Новый (актуально)

# Selenium 4
driver.find_element(By.CSS_SELECTOR, "button[type='submit']")

Поиск по тексту ссылки

Старый (устарело)

# Selenium 3
driver.find_element_by_link_text("Программы")
driver.find_element_by_partial_link_text("Прог")

Новый (актуально)

# Selenium 4
driver.find_element(By.LINK_TEXT, "Программы")
driver.find_element(By.PARTIAL_LINK_TEXT, "Прог")

Поиск всех элементов

Старый (устарело)

# Selenium 3
driver.find_elements_by_class_name("btn")
driver.find_elements_by_tag_name("a")

Новый (актуально)

# Selenium 4
driver.find_elements(By.CLASS_NAME, "btn")
driver.find_elements(By.TAG_NAME, "a")

Полная таблица соответствий

Selenium 3 (устарело) Selenium 4 (актуально)
find_element_by_id(v)find_element(By.ID, v)
find_element_by_name(v)find_element(By.NAME, v)
find_element_by_class_name(v)find_element(By.CLASS_NAME, v)
find_element_by_tag_name(v)find_element(By.TAG_NAME, v)
find_element_by_link_text(v)find_element(By.LINK_TEXT, v)
find_element_by_partial_link_text(v)find_element(By.PARTIAL_LINK_TEXT, v)
find_element_by_css_selector(v)find_element(By.CSS_SELECTOR, v)
find_element_by_xpath(v)find_element(By.XPATH, v)
find_elements_by_*(v)find_elements(By.*, v)

webdriver-manager в лекционных примерах

В лекционных решениях встречается явная инициализация через ChromeDriverManager(). В Selenium 4 это не нужно: Selenium Manager управляет драйверами автоматически.

Из лекции (старый стиль)

# Selenium 3 / webdriver-manager явно
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

Современный способ (Selenium 4)

# Selenium 4 — Selenium Manager сам найдёт драйвер
driver = webdriver.Chrome()