Практическое руководство по тестированию приложений с использованием Selenium

Selenium нужена для автоматического тестирования приложений и администрирования интернет-ресурсов. Рассказываем, как настроить программу и проводить с ней тесты.

523 открытий3К показов
Практическое руководство по тестированию приложений с использованием Selenium

Набор программ с открытым исходным кодом Selenium применяется для тестирования приложений в автоматическом режиме и администрирования интернет-ресурсов (локально или непосредственно в сети). Инструменты Selenium автоматизируют действия браузера — это ускоряет процесс разработки программных продуктов, сокращает период тестирования и отладки и повышает качество приложений.

Узнаем, какие есть возможности и преимущества у Selenium, как установить и настроить программу, как писать тесты и как их запускать.

Что такое Selenium

В список программ из набора входят: плагин для браузеров Firefox, Chrome и других, единая среда разработки с записью действий пользователя IDE, актуальная библиотека для управления браузерами Selenium WebDriver, кластер для серверов Grid и другие инструменты.

Selenium — многофункциональный каркас для тестирования web-приложений, в котором реализован инновационный подход к валидации приложений, то есть к процессу оценки конечного продукта. Selenium Java и Python задействует динамический механизм проверки и тестирования при запуске кода.

Ключевое преимущество Selenium заключается в том, что в отличие от других инструментов для тестирования веб-сервисов, которые стимулируют HTTP-запросы, он действует по алгоритму браузера. При автоматическом тестировании Selenium действительно запускает браузер и выполняет все шаги, какие мог бы делать пользователь, работая с приложением.

Еще одно отличие Selenium от других приложений в том, что тесты с помощью инструментов этой среды могут писать не только программисты, но и рядовые пользователи. Дело в том, что тесты могут быть записаны как код и как Fit-таблицы. Набор тестов запускается с помощью утилиты ANT или в среде постоянной интеграции.

Основной продукт Selenium — библиотека WebDriver для управления браузерами. В нее входит семейство драйверов, предназначенных для наиболее популярных браузеров — Firefox, Edge, Chrome, Opera и других. Кроме того, сюда входят клиентские библиотеки для взаимодействия с драйверами на разных языках. WebDriver работает с самыми актуальными языками программирования — Java, C#, Python, JavaScript и другими.

Алгоритм работы WebDriver простой — он непосредственно отправляет команды в браузер, используя его интерфейс управления, и тут же получает результаты тестирования. То есть используется способ действий, максимально приближенный к поведению пользователя.

Будучи эффективным инструментом автоматизации, Selenium на Java и Python имитирует такие действия, как клики по различным элементам, ввод текста, переход по ссылкам и другие виды активности. По сути, использование Selenium WebDriver — это запуск бота, который выполняет все ручные операции с приложением в автоматическом режиме.

Эксперты и пользователи выделяют следующие преимущества Selenium:

  • поддержка всех популярных языков программирования включая Java и Python, что делает этот инструмент востребованным среди широкого круга разработчиков и пользователей;
  • кроссбраузерное тестирование — тесты можно запускать во всех массовых браузерах, что обеспечивает обширную совместимость продуктов;
  • интеграция с другими инструментами (например, Jenkins), что позволяет автоматизировать тестирование в рамках процесса разработки.

Поскольку Selenium отлично моделирует поведение реальных пользователей, его часто применяют для тестирования на соответствие ожиданиям и требованиям аудитории. Это довольно гибкий инструмент, который без проблем интегрируется с различными тестовыми фреймворками и многими методами тестирования. Таким образом, разработчик может в любой момент расширить свой инструментарий и использовать библиотеку для решения более узких задач — например, проверки производительности.

Тестирование с помощью Selenium применяется и совершенствуется с 2004 года. За 20 лет он стал самым распространенным инструментом тестирования web-приложений. Его используют как рядовые разработчики для решения сугубо локальных задач, так и огромные корпорации, в числе которых Google.

Установка и настройка Selenium

Библиотеку можно использовать совместно с Java, Python и другими языками. Рассмотрим вариант на примере Python последней версии.

Для начала выполняется привязка библиотеки Selenium к Python. Это делается с помощью Selenium Python API, который предоставляет доступ к полному функционалу WebDriver.

Установка компонентов начинается с загрузки Python на рабочую машину. Для начала необходимо зайти на официальный ресурс языка программирования и скачать установщик для вашей операционной системы (например, Windows). В процессе установки не забудьте поставить галочки, чтобы добавить нужные компоненты в системные переменные. Далее устанавливается сама библиотека Selenium.

При взаимодействии с Python это делается с помощью команды в консоли:

			pip install selenium
		

Создание приложений предполагает использование интегрированной среды разработки, но код можно написать и в стандартном текстовом редакторе. Можно выбрать среду PyCharm, которая считается наиболее популярной и удобной

Для тестирования в браузере, кроме Selenium, понадобится веб-драйвер. В случае с Chrome это ChromeDriver — его версия должна соответствовать текущей версии браузера.

Дальнейший шаг — создание первого скрипта с использование драйвера. Для этого нужно открыть среду разработки (в нашем случае PyCharm) и создать новый проект, указав его имя и нажав Create.

Первый тест может выглядеть следующим образом:

			from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/.../.../chromedriver.exe')
driver.get("https://www.saucedemo.com/")
input_username = driver.find_element_by_id("user-name")
if input_username is None:
   print("Элемент не найден")
else:
   print("Элемент найден")

		

Далее нужно установить Selenium в проект с помощью команды Install package selenium. Если все шаги проделаны корректно, запустится браузер. Сообщение «элемент найден» — результат успешного запуска сценария на Python.

Далее можно создавать алгоритмы, необходимые для тестирования элементов приложения. Это может быть кейс аутентификации пользователя на страницах интернет-магазина — он вводит корректные логин и пароль и попадает на главную страницу. Аналогичным образом тестируются и другие приложения.

Основы работы с Selenium

Инструменты Selenium обнаруживают и взаимодействуют с различными компонентами веб-сервисов.

Например, можно обнаружить элемент с помощью идентификаторов. В этом поможет следующая команда:

			element = driver.find_element_by_id (“expame_id”)
		

Есть и другие методы организации поиска — по имени (by_name), по классу (class_name), по тегу (tag_name).

Это далеко не исчерпывающий список возможностей. Есть и другие способы поиска компонентов на странице, но указанные выше используются чаще других.

Для взаимодействия с элементами используются специальные команды. Например, ввод текста в соответствующее поле и нажатие (клик) на кнопку. Для этого используются команды send_keys и click.

Практическое руководство по тестированию приложений с использованием Selenium 1
Пример реализации ввода текста и нажатия на кнопку

Ожидания и обработка асинхронных элементов

Тестирование поиска нужных элементов на странице интернет-магазина и добавления в корзину найденного товара — распространенное действие, которое реализуется на многих веб-сервисах. В результате проделанного алгоритма в консоль выводится сообщение, что товар помещен в корзину.

Однако на практике мы сталкиваемся с распространенной проблемой, когда при выборе позиции мы сразу жмем на корзину, но нужного действия не происходит. Если интернет медленный или ответ от сервера слишком долгий, в корзину ничего не добавляется. Для решения этой проблемы предусмотрены ожидания.

В Selenium WebDriver есть два вида ожиданий — явное и неявное (explicit и implicitly). В случае с явными ожиданиями специальные методики помогут использовать время исполнения теста рационально: устанавливается минимум по сроку ожидания, после чего элемент возвращается в случае, если прогрузился раньше запланированного времени.

Пример явного ожидания выглядит следующим образом:

			element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable(
        (By.XPATH, '//*[@id=\"page_wrapper\"]/footer/ul/li[2]/a')
    )
)

		

Ожидание длится 10 секунд — если за это время элемент становится доступным, по нему можно кликнуть. Если он не прогрузился, создается исключение TimeoutException.

Неявные ожидания работают по другому сценарию. Они устанавливаются однократно для драйвера, но не для каждого компонента. Неявное ожидание запускается, когда тесты Selenium не находят элемент. После истечения установленного времени тоже создается исключение TimeoutException. Такой способ менее гибок и может увеличить общее время тестовых прогонов.

Один из примеров неявного ожидания:

			driver.implicitly_wait(10)
		

Таким образом, явное ожидание при тестировании — более предпочтительный вариант.

Параметризация и запуск тестов в различных браузерах

Для удаленного управления и организации сети из нескольких браузеров на разных компьютерах используют кластер Selenium Grid. Таким способом разработчики выполняют параллельное тестирование, что существенно экономит их время.

Grid — часть библиотеки Selenium, созданная специально для параллельного запуска. Процесс реализуется с помощью маршрутизации команд браузеров, при этом сервер становится концентратором и настраивается под задачу выполнения тестов.

Архитектура Selenium Grid состоит из хаба и узла (Hub и Node). Хаб — это центр, куда загружаются все тесты. В каждой сети есть только один хаб, который запускается на одном устройстве.

Узлы — экземпляры инструмента Selenium, которые выполняют загруженные в хаб тесты. Узлов в сети может быть несколько, они могут запускаться на разных устройствах с различными браузерами.

Концепция «хаб-узел» предполагает запуск теста на одном устройстве, а его выполнения на нескольких узлах.

Схематический алгоритм настройки Selenium Grid выглядит следующим образом:

  1. Загрузка Selenium Grid с официального сайта проекта.
  2. Размещение файла Selenium Server.jar в любой папке жесткого диска. 
  3. Запуск хаб на основном устройстве. Это делается через командную строку.
  4. Запуск узла на подчиненных устройствах. 
  5. Действия в Selenium Grid по настройке сети. 

Кластер используется, когда тесты нужно запустить в разных браузерах, ОС и на нескольких устройствах. Такая проверка гарантирует, что тестируемое приложение будет совместимо с любыми системами и компьютерами. При этом разработчик экономит время при выполнении тестов.

Практические рекомендации и лучшие практики

Несколько ценных советов от опытных разработчиков помогут использовать Selenium Grid более эффективно.

Применение POM — Page Object Model

Применение шаблона проектирования POM помогает организации кода тестов, разделяя их логику и логику взаимодействия с веб-страницей. Такой подход улучшает читаемость и поддерживает код, делая более простым процесс обновления тестов после изменения страниц.

POM представляет собой паттерн проектирования в среде Selenium. С его помощью создается репозиторий объектов, где хранятся все веб-элементы. При использовании POM снижается риск дупликации кода и улучшается поддержка тестов.

Интеграция с CI/CD

Системы непрерывной интеграции и доставки обеспечивают автоматический запуск тестов при любом изменении когда. Такое решение поддерживает качество продукта на высоком уровне и позволяет быстро находить ошибки. В числе популярных инструментов CI/CD — Jenkins, GitLab CI и многие другие.

Организация кода

Чтобы улучшить читаемость и поддержку кода, опытные разработчики рекомендуют разделять тесты на несколько логических блоков и при этом применять классы и функции. Так будет проще управлять тестами и использовать код вторично.

Параллельное исполнение

Чтобы ускорить выполнение тестов, используют параллельное тестирование с использованием Selenium. Это делается через фреймворки типа Pytest или TestNG. Параллельное исполнение обеспечивает запуск сразу нескольких тестов одновременно — такой подход существенно снижает общее время тестирования.

Selenium Server

Сервер Selenium предназначен для дистанционного управления браузерами. Поддерживает команды WebDriver, действуя по установленному алгоритму:

  1. На устройстве, где нужно настроить браузер, устанавливают и запускают сервер.
  2. На другом устройстве пользователь запускает программу с драйвером RemoteWebDriver. Эта программу подключают к серверу на первом обустройстве и отправляют ему команды на Java или Python. 
  3. Сервер активирует браузер и действует через драйвер, соответствующий браузеру. 

Использование плагина IDE

Созданы специальные плагины, которые упрощают работу с Mozilla и Chrome. Плагин фиксирует действия юзера, после чего воспроизводит их и генерирует программный код на Java, C#, Python и других языках для WebDriver. Затем библиотеки повторяют процесс.

Плагин — разработка Selenium, созданная специально для продуктивных действий со сценарием тестирования web страниц. Основной плюс IDE — возможность записывать и сохранять тесты, чтобы в дальнейшем их обрабатывать.

Selenium IDE — эффективный механизм отладки тестирования с использованием контрольных точек. При этом тестовые кейсы можно повторно запускать внутри других.

Итоги

Автоматизация тестирования веб-приложений с помощью Selenium — это обширная тема, которую невозможно подробно охватить в рамках одной статьи. Эффективная работа с библиотеками и инструментами достигается на практике, поэтому важно больше времени уделять прикладному применению указанных в нашем материале методик. Работа с Selenium экономит время, избавляет разработчиков от рутинных задач и ускоряет написание чистого и корректного кода.

Следите за новыми постами
Следите за новыми постами по любимым темам
523 открытий3К показов