✅ Решения заданий самопроверки

🎯 Разбор ответов на вопросы лекции

Задание 1: Компоненты Selenium

Selenium — набор инструментов для автоматизации тестирования веб-приложений.

Три компонента:

  1. Selenium IDE — простая среда для записи и воспроизведения тестов в браузере. Подходит для начального уровня.
  2. Selenium WebDriver — мощный API для взаимодействия с браузерами на уровне ОС. Позволяет писать тесты на Python, Java, C# и других языках.
  3. Selenium Grid — инструмент для параллельного выполнения тестов на нескольких машинах и браузерах одновременно.

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

WebDriver взаимодействует с браузерами на уровне операционной системы:

  1. Тестовый скрипт на Python отправляет команду WebDriver.
  2. WebDriver передаёт команду браузеру через специфичный для него драйвер (например, ChromeDriver для Chrome).
  3. Браузер выполняет команду и возвращает результат.

WebDriver поддерживает Chrome, Firefox, Safari, Edge, а также Python, Java, C#, Ruby, JavaScript.

Задание 3: Основные драйверы

ДрайверБраузер
ChromeDriverGoogle Chrome
GeckoDriverMozilla Firefox
SafariDriverApple Safari (встроен в macOS)
EdgeDriverMicrosoft 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 в памяти.