Python: Selenium
Теория: Первый тест
После установки всех зависимостей можно написать первый тест и проверить, что Selenium управляет браузером. Начинается всё с импорта нужного модуля.
Модуль webdriver — это основа Selenium. Он отвечает за запуск браузера, отправку команд и получение результатов. Через него создаётся объект драйвера, который управляет браузером во время теста.
Например, чтобы открыть Chrome, используется конструктор webdriver.Chrome(). Этот вызов обращается к установленному драйверу ChromeDriver и запускает новое окно браузера. Если ChromeDriver находится в PATH, Selenium найдёт его автоматически.
Дальше браузеру передаётся команда загрузить страницу:
Метод get() открывает указанный адрес и ждёт полной загрузки документа, включая HTML, CSS и JavaScript. Если сайт открылся — значит связка Selenium и драйвера работает правильно.
После выполнения действий браузер нужно закрыть:
Метод quit() завершает сессию WebDriver и корректно останавливает процессы браузера.
Полный код первого теста:
При запуске откроется окно браузера, загрузится страница example.com, затем браузер закроется. Это базовая проверка, что окружение Selenium установлено корректно и готово к работе.
Открытие браузера
Когда модуль Selenium установлен, можно запустить браузер из кода. Для этого используется объект WebDriver. Он открывает браузер, управляет вкладками и выполняет действия пользователя.
Чтобы открыть Chrome, создаётся экземпляр драйвера:
Команда webdriver.Chrome() запускает браузер Chrome через программу ChromeDriver. Этот драйвер должен быть установлен в системе и находиться в переменной PATH. Если всё настроено правильно, при выполнении кода откроется новое окно браузера.
Selenium поддерживает и другие браузеры. Для Firefox используется webdriver.Firefox(), для Edge — webdriver.Edge(), для Safari — webdriver.Safari(). Пример для Firefox:
При необходимости драйверу можно передавать настройки, например путь к профилю пользователя, аргументы запуска или флаги безголового режима. Пример запуска без интерфейса:
Такой режим используется на серверах и в CI/CD, где браузер должен работать без графической оболочки.
Если при запуске браузер открывается и не выдаёт ошибок, значит WebDriver установлен корректно, и можно переходить к управлению страницей.
Поиск элемента и клик
После открытия страницы браузером можно взаимодействовать с элементами интерфейса: нажимать кнопки, вводить текст, выбирать пункты меню. Всё это выполняется через методы поиска элементов и действий WebDriver.
Чтобы Selenium мог найти элемент, нужно указать, по какому признаку его искать. Для этого используется модуль By:
Пример простого сценария: открыть страницу и нажать кнопку.
Метод find_element() ищет первый подходящий элемент по заданному признаку. В примере поиск идёт по тегу button. В реальных тестах чаще используются другие способы:
- По
id:driver.find_element(By.ID, "login-button") - По имени:
driver.find_element(By.NAME, "username") - По классу:
driver.find_element(By.CLASS_NAME, "btn-primary") - По CSS-селектору:
driver.find_element(By.CSS_SELECTOR, ".form .submit") - По XPath:
driver.find_element(By.XPATH, "//button[text()='Login']")
После того как элемент найден, над ним можно выполнять действия:
click()— клик мышью,send_keys("текст")— ввод текста,clear()— очистка поля ввода.
Например, тест, который заполняет форму логина:
Этот код открывает страницу входа, вводит данные и нажимает кнопку «Войти». Так Selenium выполняет те же действия, что и пользователь, только автоматически.
Проверка результата с помощью assert
После выполнения действий на странице важно убедиться, что результат соответствует ожиданиям. Для этого в тестах используется оператор assert. Он сравнивает фактическое значение с ожидаемым и вызывает ошибку, если условие не выполнено.
Простейший пример: проверка заголовка страницы после открытия сайта.
Если условие выполняется, тест проходит успешно. Если заголовок не содержит нужного текста, Pytest покажет сообщение об ошибке с деталями:
Оператор assert можно использовать с любыми выражениями. Например, проверка URL после перехода по ссылке:
Или проверка содержимого элемента:
Если тест должен проверить несколько шагов, можно использовать несколько assert подряд. Каждый из них фиксирует конкретное ожидание:
При падении любого из них Pytest укажет, какой именно тест не прошёл.


