✅ Решения заданий самопроверки
Задание 1: Компоненты Selenium
Selenium — набор инструментов для автоматизации тестирования веб-приложений.
Три компонента:
- Selenium IDE — простая среда для записи и воспроизведения тестов в браузере. Подходит для начального уровня.
- Selenium WebDriver — мощный API для взаимодействия с браузерами на уровне ОС. Позволяет писать тесты на Python, Java, C# и других языках.
- Selenium Grid — инструмент для параллельного выполнения тестов на нескольких машинах и браузерах одновременно.
Задание 2: Принцип работы WebDriver
WebDriver взаимодействует с браузерами на уровне операционной системы:
- Тестовый скрипт на Python отправляет команду WebDriver.
- WebDriver передаёт команду браузеру через специфичный для него драйвер (например, ChromeDriver для Chrome).
- Браузер выполняет команду и возвращает результат.
WebDriver поддерживает Chrome, Firefox, Safari, Edge, а также Python, Java, C#, Ruby, JavaScript.
Задание 3: Основные драйверы
| Драйвер | Браузер |
|---|---|
| ChromeDriver | Google Chrome |
| GeckoDriver | Mozilla Firefox |
| SafariDriver | Apple Safari (встроен в macOS) |
| EdgeDriver | Microsoft Edge |
Задание 4: Преимущества и недостатки
Преимущества (минимум 3):
- Кроссбраузерность: Chrome, Firefox, Edge, Safari.
- Поддержка нескольких языков программирования.
- Бесплатный и с открытым исходным кодом.
- Интеграция с CI/CD инструментами.
Недостатки (минимум 3):
- Не подходит для тестирования производительности.
- Трудности с динамически загружаемыми элементами.
- Высокая зависимость от структуры DOM — изменения HTML ломают тесты.
Задание 5: Установка
# PowerShell / Windows
pip install selenium
# Проверка версии
pip show selenium
Если вывод pip show selenium содержит строку Version: 4.x.x — установка успешна.
Задание 6: Минимальный скрипт
# subjects/auto-qa/examples/lesson04/task6_open_site.py
from selenium import webdriver
driver = webdriver.Chrome() # Selenium 4 — Selenium Manager
driver.get("https://itcareerhub.de/ru")
print("Страница открыта:", driver.title)
driver.quit() # Всегда закрываем браузер
Задание 7: Методы навигации и окна
| Метод | Описание |
|---|---|
get(url) | Открыть указанный URL |
back() | Вернуться на предыдущую страницу |
forward() | Перейти вперёд по истории |
refresh() | Обновить текущую страницу |
set_window_size(w, h) | Задать размер окна |
maximize_window() | Развернуть на весь экран |
minimize_window() | Свернуть окно |
Задание 8: Навигация + скриншот
# subjects/auto-qa/examples/lesson04/task8_nav_screenshot.py
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://itcareerhub.de/ru/")
sleep(2)
driver.get("https://www.berlin.de/")
sleep(2)
driver.back()
sleep(2)
driver.save_screenshot("./screenshot.png")
print("Скриншот сохранён: ./screenshot.png")
driver.quit()
Задание 9: Фикстура pytest
Фикстура — функция, которая подготавливает данные или состояние перед выполнением теста и очищает их после.
Преимущества выноса WebDriver в фикстуру:
- Повторное использование: один
driverна все тесты. - Автоочистка: браузер закрывается автоматически, даже при ошибке.
- Нет дублирования кода инициализации в каждом тесте.
Задание 10: Фикстура + два теста
# subjects/auto-qa/examples/lesson04/conftest.py
import pytest
from selenium import webdriver
@pytest.fixture
def driver():
driver = webdriver.Chrome()
driver.maximize_window()
yield driver
driver.quit()
# subjects/auto-qa/examples/lesson04/test_task10.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"
Задание 11: quit() vs close()
| Метод | Что делает | Когда использовать |
|---|---|---|
driver.quit() |
Закрывает браузер полностью и завершает процесс WebDriver (ChromeDriver). Освобождает все ресурсы. | В teardown фикстуры pytest — всегда |
driver.close() |
Закрывает только текущую вкладку. Процесс WebDriver остаётся в памяти. | Только при работе с несколькими вкладками, когда нужно закрыть одну из них |
В фикстуре pytest всегда вызываем driver.quit(), потому что нам нужно полностью завершить сессию WebDriver и не оставлять «висящие» процессы chromedriver в памяти.