🐛 Типичные ошибки: Selenium WebDriver

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

⚡ Топ-3 ошибки при старте с Selenium

  1. Забыть driver.quit() — браузер и процесс драйвера зависают в памяти
  2. executable_path= — удалён в Selenium 4, используйте Service()
  3. Нет ожиданий — тест падает, потому что элемент ещё не загружен

Ошибка 1: Забытый driver.quit()

Неправильно

# ❌ Браузер остаётся открытым
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://google.com")
# Забыли driver.quit()
# Процесс chromedriver зависает

Правильно

# ✅ Всегда закрывать в finally
from selenium import webdriver

driver = webdriver.Chrome()
try:
    driver.get("https://google.com")
    print(driver.title)
finally:
    driver.quit()  # выполнится даже при ошибке
Симптом: после нескольких запусков в диспетчере задач появляются десятки процессов chromedriver.exe и chrome.exe.

Ошибка 2: executable_path= (удалён в Selenium 4)

Неправильно

# ❌ TypeError: __init__() got unexpected keyword
driver = webdriver.Chrome(
    executable_path="/path/to/chromedriver"
)

Правильно

# ✅ Service() или Selenium Manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# Вариант 1: Selenium Manager (авто)
driver = webdriver.Chrome()

# Вариант 2: явный путь через Service
driver = webdriver.Chrome(
    service=Service("C:/path/chromedriver.exe")
)

Ошибка 3: Нет ожиданий — элемент не найден

Неправильно

# ❌ NoSuchElementException — элемент ещё не загружен
from selenium.webdriver.common.by import By

driver.get("https://itcareerhub.de/ru")
# JavaScript ещё рендерит страницу...
link = driver.find_element(By.LINK_TEXT, "О нас")
link.click()  # Exception!

Правильно

# ✅ sleep (простой) или WebDriverWait (надёжно)
from time import sleep
from selenium.webdriver.common.by import By

driver.get("https://itcareerhub.de/ru")
sleep(3)  # простой вариант для начала

# Или (лучше) явное ожидание:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
link = wait.until(
    EC.element_to_be_clickable((By.LINK_TEXT, "О нас"))
)
link.click()

Ошибка 4: find_element_by_* (удалено в Selenium 4)

Неправильно

# ❌ AttributeError: удалено в Selenium 4
element = driver.find_element_by_id("myId")
element = driver.find_element_by_name("q")

Правильно

# ✅ By.* локаторы
from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, "myId")
element = driver.find_element(By.NAME, "q")

Ошибка 5: driver.close() вместо driver.quit()

Неправильно (если тест с одним окном)

# ⚠️ close() закрывает только вкладку
# Процесс chromedriver продолжает работать
driver.close()

Правильно

# ✅ quit() завершает сессию и процесс драйвера
driver.quit()

close() полезен только если у вас несколько вкладок/окон и нужно закрыть одну, оставив остальные. В большинстве тестов используйте quit().

Ошибка 6: Несовместимость версий Chrome и ChromeDriver

Симптом: SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114

Причина: версии Chrome и ChromeDriver не совпадают (Selenium 3 / ручная загрузка).

Решение (Selenium 4): driver = webdriver.Chrome() — Selenium Manager сам подберёт версию. Обновление Chrome больше не ломает тесты.

Ошибка 7: Неверный локатор By.LINK_TEXT — чувствительность к регистру

Неправильно

# ❌ NoSuchElementException
# На сайте ссылка: "О нас" (с заглавной)
link = driver.find_element(By.LINK_TEXT, "о нас")

Правильно

# ✅ Точное совпадение с текстом ссылки
link = driver.find_element(By.LINK_TEXT, "О нас")

# Или частичное совпадение (нечувствительно к длине)
link = driver.find_element(By.PARTIAL_LINK_TEXT, "нас")

Ошибка 8: Отсутствие conftest.py рядом с тестами

Симптом: fixture 'driver' not found при запуске pytest.

Причина: conftest.py лежит в другой папке или не создан вообще.

Решение: conftest.py должен находиться в той же папке, что и тест-файлы, или в родительской папке. Pytest автоматически подхватывает фикстуры из conftest.py.

Структура папки: как должно быть

project/
├── conftest.py        # фикстуры здесь
├── test_navigation.py
└── test_login.py