🐛 Частые ошибки — Selenium WebDriver

🎯 Типичные проблемы начинающих

⚡ Топ-3 ошибки

  1. Забыть driver.quit() — процесс ChromeDriver «зависает» в памяти.
  2. Использовать executable_path= — устарело в Selenium 4, вызывает TypeError.
  3. Не ждать загрузку страницы перед find_element — ElementNotFound.

Ошибка 1: Забыли вызвать driver.quit()

Симптом

Браузер остаётся открытым после завершения скрипта. В диспетчере задач накапливаются процессы chromedriver.exe. При следующем запуске появляются ошибки из-за конфликта портов.

Неправильно

driver = webdriver.Chrome()
driver.get("https://example.com")
# driver.quit() — забыли!
print("Готово")

Правильно

driver = webdriver.Chrome()
try:
    driver.get("https://example.com")
    print("Готово")
finally:
    driver.quit()  # Выполнится в любом случае, даже при исключении

В pytest: используйте driver.quit() в teardown-части фикстуры (после yield).

Ошибка 2: Использование устаревшего executable_path

Симптом

TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'

Неправильно (Selenium 3 стиль)

driver = webdriver.Chrome(executable_path="path/to/chromedriver")  # УСТАРЕЛО

Правильно (Selenium 4)

driver = webdriver.Chrome()  # Selenium Manager управляет драйвером автоматически

Ошибка 3: Обращение к элементу до загрузки страницы

Симптом

selenium.common.exceptions.NoSuchElementException: no such element: Unable to locate element

Неправильно

driver.get("https://itcareerhub.de/ru")
element = driver.find_element(By.LINK_TEXT, "О нас")  # Страница ещё не загружена!
element.click()

Временное решение (из лекции)

from time import sleep

driver.get("https://itcareerhub.de/ru")
sleep(3)  # Ждём 3 секунды — ненадёжно, но работает как временное решение
element = driver.find_element(By.LINK_TEXT, "О нас")
element.click()

Правильное решение (WebDriverWait)

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get("https://itcareerhub.de/ru")
element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "О нас"))
)
element.click()
Явные ожидания WebDriverWait — тема урока 07. Сейчас достаточно использовать sleep() как временное решение.

Ошибка 4: driver.close() вместо driver.quit() в фикстуре

Симптом

Браузер не закрывается после теста. Процесс ChromeDriver остаётся в памяти.

Неправильно

@pytest.fixture
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.close()  # Закрывает только текущую вкладку, не сессию!

Правильно

@pytest.fixture
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()  # Завершает всю сессию WebDriver

Ошибка 5: Неправильный путь к файлу скриншота

Симптом

PermissionError / FileNotFoundError при save_screenshot()

Проблема

driver.save_screenshot("C:\Users\username\screenshot.png")
# Обратные слеши в строке Python — экранирование!

Правильно (Windows)

driver.save_screenshot("./screenshot.png")                # В текущую папку
driver.save_screenshot(r"C:\Users\username\screenshot.png") # Raw string
driver.save_screenshot("C:/Users/username/screenshot.png")  # Прямые слеши

Ошибка 6: Неверная версия ChromeDriver

Симптом

SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114

Причина

В Selenium 3 нужно было вручную загружать ChromeDriver, совпадающий с версией браузера. При обновлении Chrome драйвер становился несовместимым.

Решение

Используйте Selenium 4 — Selenium Manager сам загружает нужную версию ChromeDriver. Если вы используете webdriver-manager, обновите его: pip install --upgrade webdriver-manager.