Python: Selenium

Теория: Проверки и утверждения

После выполнения действий на странице тест должен подтвердить, что результат соответствует ожиданиям. В Selenium это делается с помощью утверждений — выражений с оператором assert. Они сравнивают фактическое состояние страницы с ожидаемым и сообщают Pytest, если что-то пошло не так.

Проверка URL, текста, отображения элементов

Самая частая проверка — переход по адресу. После входа в систему, клика по кнопке или перехода по ссылке тест должен убедиться, что браузер оказался на нужной странице. Для этого используется свойство current_url:

from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://ru.hexlet.io")

driver.find_element("link text", "Войти").click()
assert "/login" in driver.current_url

driver.quit()

Если в адресе действительно есть /login, проверка пройдёт. Если нет — Pytest сообщит, что ожидалось одно, а получено другое.

Следующий важный тип проверки — текст. Обычно проверяют заголовки, сообщения об ошибках или подтверждения действий.

from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get("https://the-internet.herokuapp.com/login")

driver.find_element(By.ID, "username").send_keys("tomsmith")
driver.find_element(By.ID, "password").send_keys("wrong")
driver.find_element(By.CSS_SELECTOR, "button.radius").click()

error = driver.find_element(By.ID, "flash")
assert "Your password is invalid!" in error.text

driver.quit()

Метод .text возвращает видимый текст элемента. Если сообщение не совпадает, тест падает с ошибкой.

Иногда нужно просто убедиться, что элемент появился на странице. Для этого используется метод .is_displayed().

button = driver.find_element(By.LINK_TEXT, "Войти")
assert button.is_displayed()

Если элемент найден и виден, тест проходит. Если элемент скрыт или отсутствует, Selenium поднимет исключение.

Использование assert и pytest.raises

В тестах Python используется оператор assert. Он проверяет любое условие и вызывает ошибку, если результат не совпадает с ожидаемым. В Selenium через него фиксируют поведение интерфейса.

driver.get("https://the-internet.herokuapp.com/login")

driver.find_element(By.ID, "username").send_keys("tomsmith")
driver.find_element(By.ID, "password").send_keys("SuperSecretPassword!")
driver.find_element(By.CSS_SELECTOR, "button.radius").click()

assert "/secure" in driver.current_url
assert "You logged into a secure area!" in driver.find_element(By.ID, "flash").text

Если условие выполняется, тест идёт дальше. Если нет — Pytest сообщает, на каком утверждении произошла ошибка.

Для проверки ошибок используют pytest.raises. Этот инструмент показывает, что программа должна вызвать исключение в определённой ситуации. Например, если элемент не существует.

import pytest
from selenium.common.exceptions import NoSuchElementException


with pytest.raises(NoSuchElementException):
    driver.find_element(By.ID, "not-existing-id")

Если исключение действительно появилось, тест проходит. Если элемент вдруг найден — тест падает.

Позитивные и негативные кейсы

Любая функциональность тестируется в двух направлениях. Позитивные кейсы проверяют нормальный сценарий, когда пользователь вводит корректные данные. Негативные — что система правильно реагирует на ошибки и не даёт пройти дальше.

Позитивный пример — успешная авторизация:

driver.get("https://the-internet.herokuapp.com/login")

driver.find_element(By.ID, "username").send_keys("tomsmith")
driver.find_element(By.ID, "password").send_keys("SuperSecretPassword!")
driver.find_element(By.CSS_SELECTOR, "button.radius").click()

assert "/secure" in driver.current_url
assert "You logged into a secure area!" in driver.find_element(By.ID, "flash").text

После входа браузер должен открыть /secure и показать сообщение об успехе.

Негативный пример — неправильный пароль:

driver.get("https://the-internet.herokuapp.com/login")

driver.find_element(By.ID, "username").send_keys("tomsmith")
driver.find_element(By.ID, "password").send_keys("wrong")
driver.find_element(By.CSS_SELECTOR, "button.radius").click()

error = driver.find_element(By.ID, "flash").text
assert "Your password is invalid!" in error

Позитивный тест подтверждает, что функция работает. Негативный — что она ломается правильно: сайт не падает, не даёт доступ и показывает понятную ошибку. Вместе они обеспечивают полное покрытие поведения системы.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845