💻 Примеры: Selenium WebDriver в действии

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

⚡ Минимальный рабочий скрипт

# open_browser.py
from selenium import webdriver

driver = webdriver.Chrome()
try:
    driver.get("https://itcareerhub.de/ru")
    print(driver.title)
finally:
    driver.quit()

Пример 1: Запуск Chrome и открытие страницы

Простейший скрипт — открыть сайт и вывести заголовок страницы.

# open_browser.py
from selenium import webdriver

# Selenium Manager автоматически найдёт и настроит ChromeDriver
driver = webdriver.Chrome()
try:
    driver.get("https://itcareerhub.de/ru")
    print("Заголовок страницы:", driver.title)
    print("Текущий URL:", driver.current_url)
finally:
    driver.quit()
Selenium 4 не требует указывать путь к ChromeDriver — Selenium Manager делает это автоматически. Если нужен явный контроль, используйте webdriver-manager (см. Справочник).

Пример 2: Навигация по истории браузера

При каждом вызове driver.get() браузер записывает URL в историю. Методы back() и forward() перемещаются по ней.

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

driver = webdriver.Chrome()
try:
    # Открываем первую страницу
    driver.get("https://itcareerhub.de/ru/")
    print("Страница 1:", driver.title)
    sleep(2)

    # Переходим на вторую
    driver.get("https://www.berlin.de")
    print("Страница 2:", driver.title)
    sleep(2)

    # Возвращаемся назад
    driver.back()
    print("После back():", driver.title)
    sleep(2)

    # Идём вперёд
    driver.forward()
    print("После forward():", driver.title)
    sleep(2)

    # Обновляем страницу
    driver.refresh()
    print("После refresh():", driver.title)
    sleep(2)
finally:
    driver.quit()

Пример 3: Управление размером окна и скриншот

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

driver = webdriver.Chrome()
try:
    driver.get("https://itcareerhub.de/ru/")
    driver.maximize_window()     # максимизировать окно
    sleep(2)

    # Установить конкретный размер (полезно для тестирования адаптивности)
    driver.set_window_size(640, 460)
    sleep(1)

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

Пример 4: Клик по ссылке (метод click)

Метод find_element(By.LINK_TEXT, ...) находит ссылку по видимому тексту. Метод click() имитирует клик мышью.

# click_demo.py
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
try:
    driver.get("https://itcareerhub.de/ru")
    sleep(3)  # дать время загрузиться странице

    # Найти ссылку "О нас" и кликнуть
    about_link = driver.find_element(By.LINK_TEXT, "О нас")
    about_link.click()
    sleep(3)

    print("Текущий URL после клика:", driver.current_url)
finally:
    driver.quit()

Пример 5: Первый автотест с pytest-фикстурой

Это рекомендуемая структура: драйвер — в фикстуре, тесты — отдельными функциями.

# conftest.py
import pytest
from selenium import webdriver

@pytest.fixture
def driver():
    """Фикстура: создаёт и закрывает браузер для каждого теста."""
    driver = webdriver.Chrome()
    driver.maximize_window()
    yield driver        # тест получает driver и выполняется
    driver.quit()       # этот код запустится после теста в любом случае
# test_navigation.py
from selenium.webdriver.common.by import By

def test_open_google(driver):
    """Проверяем, что Google открывается и title содержит 'Google'."""
    driver.get("https://www.google.com")
    assert "Google" in driver.title

def test_open_example(driver):
    """Проверяем заголовок h1 на example.com."""
    driver.get("https://www.example.com")
    heading = driver.find_element(By.TAG_NAME, "h1").text
    assert heading == "Example Domain"

Запуск тестов:

# PowerShell
pytest test_navigation.py -v

Пример 6: Параметризованная фикстура для нескольких браузеров

Если нужно проверить один тест в Chrome и Firefox:

# conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager

@pytest.fixture(params=["chrome", "firefox"])
def driver(request):
    if request.param == "chrome":
        driver = webdriver.Chrome(
            service=ChromeService(ChromeDriverManager().install())
        )
    else:
        driver = webdriver.Firefox(
            service=FirefoxService(GeckoDriverManager().install())
        )
    driver.maximize_window()
    yield driver
    driver.quit()
# test_cross_browser.py
def test_title(driver):
    driver.get("https://www.example.com")
    assert "Example" in driver.title

# Запуск: pytest test_cross_browser.py -v
# Тест выполнится дважды: в Chrome и Firefox

Пример 7: Проверка перехода на страницу «О нас»

Полный тест с фикстурой из лекции:

# conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

@pytest.fixture
def driver():
    driver = webdriver.Chrome(
        service=ChromeService(ChromeDriverManager().install())
    )
    driver.maximize_window()
    yield driver
    driver.quit()
# test_about_page.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_about_page(driver):
    """Переход по ссылке 'О нас' и проверка заголовка страницы."""
    driver.get("https://itcareerhub.de/ru")

    # Явное ожидание появления ссылки (надёжнее, чем sleep)
    wait = WebDriverWait(driver, 10)
    about_link = wait.until(
        EC.element_to_be_clickable((By.LINK_TEXT, "О нас"))
    )
    about_link.click()

    # Проверяем, что страница изменилась
    assert "О нас" in driver.title, "Переход на страницу 'О нас' не выполнен!"
WebDriverWait — явное ожидание. Надёжнее, чем sleep(): ждёт именно до момента, когда условие выполнено (но не дольше таймаута). Подробнее — в уроке 07.