💻 Примеры: 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.