🐛 Частые ошибки — Selenium WebDriver
⚡ Топ-3 ошибки
- Забыть driver.quit() — процесс ChromeDriver «зависает» в памяти.
- Использовать executable_path= — устарело в Selenium 4, вызывает TypeError.
- Не ждать загрузку страницы перед 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.