🐛 Типичные ошибки: Selenium WebDriver
⚡ Топ-3 ошибки при старте с Selenium
- Забыть driver.quit() — браузер и процесс драйвера зависают в памяти
- executable_path= — удалён в Selenium 4, используйте
Service() - Нет ожиданий — тест падает, потому что элемент ещё не загружен
Ошибка 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