✅ Решения: Введение в Selenium

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

⚡ Правильные ответы (тесты)

  • Задание 1: б — инструмент для автоматизации веб-приложений
  • Задание 2: в — Selenium Grid
  • Задание 3: б — взаимодействует с браузером на уровне ОС

Тестовые задания

Задание 1: Б — Selenium — это инструмент для автоматизации веб-приложений (не мобильных, не API, не IDE).

Задание 2: В — Selenium Grid предназначен именно для параллельного выполнения тестов на нескольких машинах и браузерах.

Задание 3: Б — WebDriver взаимодействует с браузером на уровне ОС, отправляя ему HTTP-команды через драйвер.

Задание 4: Преимущества Selenium

  • Кроссбраузерность — один и тот же код запускается в Chrome, Firefox, Safari, Edge.
  • Мультиязычность — Python, Java, C#, JavaScript, Ruby.
  • Бесплатный и открытый — нет лицензионных сборов.
  • Кроссплатформенность — Windows, macOS, Linux.
  • Интеграция с CI/CD — Jenkins, GitLab CI, GitHub Actions.
  • Масштабируемость — Selenium Grid для параллельного запуска.
  • Большое сообщество — много документации и примеров.

Задание 5: Принцип работы WebDriver

  1. Вы пишете тест на Python: driver.get("https://google.com").
  2. Библиотека selenium переводит эту команду в HTTP-запрос по протоколу W3C WebDriver.
  3. Запрос отправляется локальному серверу — драйверу браузера (chromedriver или geckodriver).
  4. Драйвер передаёт команду браузеру (Chrome или Firefox).
  5. Браузер выполняет команду и возвращает результат (статус, данные страницы) обратно через драйвер → WebDriver → ваш скрипт.

Задание 6: Зачем нужен менеджер драйверов

В Selenium 3 каждый разработчик вручную:

  • Определял версию Chrome/Firefox
  • Скачивал соответствующий chromedriver/geckodriver
  • Обновлял его при каждом обновлении браузера

WebDriver Manager (webdriver-manager) автоматизирует эти шаги: при первом запуске скачивает нужный драйвер, кэширует его и обновляет по необходимости.

Selenium Manager (встроен в Selenium 4.6+) делает то же самое «из коробки» — webdriver-manager больше не обязателен, но всё ещё даёт явный контроль над версией.

Задание 7: Фикстура pytest для Chrome

# conftest.py
import pytest
from selenium import webdriver

@pytest.fixture
def driver():
    """
    Фикстура создаёт экземпляр Chrome WebDriver,
    передаёт его тесту и закрывает браузер после теста.
    """
    driver = webdriver.Chrome()       # Selenium Manager — авто
    driver.maximize_window()
    yield driver                       # тест получает driver
    driver.quit()                      # всегда выполнится после

Преимущества фикстуры:

  • DRY (Don't Repeat Yourself) — один раз описываем создание браузера для всех тестов.
  • Надёжное закрытиеdriver.quit() после yield гарантированно выполнится, даже если тест упал.
  • Возможность параметризации — добавить params=["chrome", "firefox"] и тесты запустятся в двух браузерах автоматически.

Решения практических заданий

Практика 1: Первый скрипт

# open_browser.py
from selenium import webdriver

driver = webdriver.Chrome()
try:
    driver.get("https://www.google.com")
    print("Заголовок:", driver.title)   # Google
finally:
    driver.quit()

Практика 2: Навигация и скриншот

# navigation_screenshot.py
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
try:
    driver.get("https://itcareerhub.de/ru")
    sleep(2)

    driver.get("https://www.example.com")
    sleep(2)

    driver.back()
    print("После back() URL:", driver.current_url)
    sleep(1)

    driver.save_screenshot("./screenshot_itch.png")
    print("Скриншот сохранён")
finally:
    driver.quit()

Практика 3: Первый pytest-тест

# conftest.py
import pytest
from selenium import webdriver

@pytest.fixture
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    yield driver
    driver.quit()
# test_basic.py
from selenium.webdriver.common.by import By

def test_google_title(driver):
    driver.get("https://www.google.com")
    assert "Google" in driver.title

def test_example_heading(driver):
    driver.get("https://www.example.com")
    heading = driver.find_element(By.TAG_NAME, "h1").text
    assert heading == "Example Domain"

Запуск (PowerShell):

pytest test_basic.py -v

Ожидаемый вывод:

test_basic.py::test_google_title PASSED
test_basic.py::test_example_heading PASSED
2 passed in X.XXs