✅ Решения: Введение в 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
- Вы пишете тест на Python:
driver.get("https://google.com"). - Библиотека
seleniumпереводит эту команду в HTTP-запрос по протоколу W3C WebDriver. - Запрос отправляется локальному серверу — драйверу браузера (chromedriver или geckodriver).
- Драйвер передаёт команду браузеру (Chrome или Firefox).
- Браузер выполняет команду и возвращает результат (статус, данные страницы) обратно через драйвер → 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