Введение
Selenium – это проект с открытым исходным кодом, объединяющий набор инструментов и библиотек для автоматизации браузеров. Он предоставляет инструмент для записи и воспроизведения тестов, позволяющий создавать функциональные тесты для большинства современных веб-браузеров без необходимости изучения языка скриптов (Selenium IDE). Также Selenium предоставляет доменно-специфичный язык для тестирования (Selenese) для написания тестов на различных популярных языках программирования, включая JavaScript (Node.js), C#, Groovy, Java, Perl, PHP, Python, Ruby и Scala. Selenium работает в операционных системах Windows, Linux и macOS. Это программное обеспечение с открытым исходным кодом, распространяемое по лицензии Apache 2.0. Selenium – это автоматизированный фреймворк с открытым исходным кодом для веб-приложений, позволяющий тестировщикам и разработчикам автоматизировать взаимодействие с браузером и проводить функциональное тестирование. Благодаря универсальным инструментам, таким как WebDriver, Selenium поддерживает множество языков программирования и упрощает кроссбраузерное тестирование, что делает его оптимальным выбором для эффективной и масштабируемой веб-автоматизации.
Selenium is an open source umbrella project for a range of tools and libraries aimed at supporting browser automation. It provides a playback tool for authoring functional tests across most modern web browsers, without the need to learn a test scripting language (Selenium IDE). It also provides a test domain specific language (Selenese) to write tests in a number of popular programming languages, including JavaScript (Node. js), C#, Groovy, Java, Perl, PHP, Python, Ruby and Scala. Selenium runs on Windows, Linux, and macOS. It is open source software released under the Apache License 2.0. Selenium is an open source automation framework for web applications, enabling testers and developers to automate browser interactions and perform functional testing. With versatile tools like WebDriver, Selenium supports various programming languages and facilitates cross browser testing, making it a go to choice for efficient and scalable web automation.
История
Селениум был первоначально разработан Джейсоном Хэггинсом в 2004 году как внутренний инструмент в ThoughtWorks. Позже к Хэггинсу присоединились другие программисты и тестировщики в ThoughtWorks, прежде чем к команде присоединился Пол Хаммант и возглавил разработку второго режима работы, который впоследствии стал "Selenium Remote Control" (RC). В том же году инструмент был выпущен в открытый доступ. В 2005 году Дэн Фабулих и Нельсон Спроул (при поддержке Пэта Лайтбоди) предложили принять серию патчей, которые преобразили Selenium RC в то, чем он стал наиболее известен. На той же встрече было решено, что управление Селениумом как проектом будет осуществляться комитетом, а Хэггинс и Хаммант будут представлять ThoughtWorks. В 2007 году Хэггинс присоединился к Google. Вместе с другими, такими как Дженнифер Беван, он продолжил разработку и стабилизацию Selenium RC. Параллельно Саймон Стюарт в ThoughtWorks разработал более совершенный инструмент автоматизации браузера под названием WebDriver. В 2009 году, после встречи разработчиков на конференции Google Test Automation Conference, было принято решение объединить оба проекта и назвать новый проект Selenium WebDriver, или Selenium 2.0. В 2008 году Филипп Ханригу (в то время работавший в ThoughtWorks) создал "Selenium Grid", который предоставляет хаб, позволяющий одновременно запускать множество тестов Selenium на любом количестве локальных или удаленных систем, тем самым сокращая время выполнения тестов. Grid предлагал, как программное обеспечение с открытым исходным кодом, функциональность, аналогичную внутренней/частной облачной инфраструктуре Google для Selenium RC. Пэт Лайтбоди уже создал частное облако для "HostedQA", которое впоследствии продал компании Gomez, Inc. Название "Selenium" произошло от шутки, которую Хэггинс опубликовал в электронном письме, высмеивая конкурента Mercury, утверждая, что отравление ртутью можно вылечить, принимая добавки селена. Получатели письма подхватили это название и использовали его.
Компоненты
Селен состоит из нескольких компонентов, каждый из которых выполняет определенную функцию в создании автоматизированных тестов для веб-приложений.
Селен IDE
Selenium IDE — это полноценная интегрированная среда разработки (IDE) для Selenium-тестов. Она реализована в виде дополнения для Firefox и расширения для Chrome. Она позволяет записывать, редактировать и отлаживать функциональные тесты. Ранее она была известна как Selenium Recorder. Selenium IDE была изначально создана Синя Касатани и передана в проект Selenium в 2006 году. Активная поддержка Selenium IDE началась в 2018 году. Скрипты могут записываться автоматически и редактироваться вручную, с поддержкой автозаполнения и возможностью быстрого перемещения команд. Скрипты записываются на Selenese — специальном языке сценариев для Selenium. Selenese предоставляет команды для выполнения действий в браузере (например, щелкнуть по ссылке, выбрать опцию) и для получения данных с результирующих страниц. Selenese служит языком для создания команд Selenium, которые используются при тестировании веб-приложений. Эти команды, ориентированные на HTML-теги элементов пользовательского интерфейса, облегчают проверку их наличия. Они помогают Selenium понимать конкретные действия или операции, которые необходимо выполнить.
API-клиента Selenium
В качестве альтернативы написанию тестов на языке Selenese, тесты также могут быть написаны на различных языках программирования. Эти тесты взаимодействуют с Selenium посредством вызова методов в клиентском API Selenium. В настоящее время Selenium предоставляет клиентские API для Java, C#, Ruby, JavaScript, R и Python.
Дистанционное управление селением
Selenium Remote Control (RC) – это сервер, написанный на Java, который принимает команды для браузера по протоколу HTTP. RC позволяет создавать автоматизированные тесты для веб-приложений на любом языке программирования, что обеспечивает лучшую интеграцию Selenium с существующими фреймворками модульного тестирования. Для упрощения написания тестов проект Selenium в настоящее время предоставляет клиентские драйверы для PHP, Python, Ruby, .NET, Perl и Java. Java-драйвер также может использоваться с JavaScript (через движок Rhino). Для запуска HTML-тест-кейса требуется экземпляр сервера Selenium RC, что означает, что порт должен быть уникальным для каждого параллельного запуска. Однако для тест-кейсов на Java/PHP достаточно одной постоянно работающей инстанции Selenium RC. Selenium Remote Control был рефакторингом Driven Selenium или Selenium B, разработанным Полом Хаммантом, а Джейсон был признан его соавтором Selenium. Изначальная версия напрямую запускала процесс для конкретного браузера из тестового языка Java, .NET, Python или Ruby. Протокол взаимодействия (в то время называвшийся «Selenese») был повторно реализован для каждого языкового порта. После рефакторинга, выполненного Дэном Фабуличем и Нельсоном Спроулом (при поддержке Пэта Лайтбоди), между тестовым скриптом и браузером появился промежуточный демон-процесс. Это позволило управлять удаленными браузерами и снизило необходимость портировать код на постоянно растущее число языков. В 2006 году Selenium Remote Control полностью заменил кодовую базу Driven Selenium. Модель взаимодействия браузера для "Driven"/"B" и "RC" была основана на запросах и ответах, что впоследствии получило название Comet. Selenium RC долгое время служил основным фреймворком для тестирования во всем проекте Selenium. И, что важно, Selenium RC – это первый и наиболее значимый инструмент автоматизированного веб-тестирования, который позволил пользователям выбирать предпочитаемый язык программирования. С выходом Selenium 2, Selenium RC был официально признан устаревшим и заменен на Selenium WebDriver.
Selenium WebDriver (Драйвер селена)
В основе Selenium лежит Selenium WebDriver – интерфейс для написания инструкций, которые могут выполняться в различных браузерах. Он является преемником Selenium RC. Selenium WebDriver принимает команды (отправляемые на Selenese или через Client API) и передает их браузеру. Это осуществляется посредством специфичного для браузера драйвера, который отправляет команды браузеру и получает результаты. Большинство драйверов браузера фактически запускают и получают доступ к браузерному приложению (например, Firefox, Google Chrome, Internet Explorer, Safari или Microsoft Edge); также существует драйвер браузера HtmlUnit, который эмулирует браузер, используя безголовый браузер HtmlUnit. В отличие от Selenium 1, где для запуска тестов требовался сервер Selenium, Selenium WebDriver не нуждается в специальном сервере для выполнения тестов. Вместо этого WebDriver напрямую запускает экземпляр браузера и управляет им. Однако Selenium Grid может использоваться совместно с WebDriver для выполнения тестов на удаленных системах (см. ниже). По возможности WebDriver использует нативные функции операционной системы, а не команды JavaScript, выполняемые в браузере, для управления браузером. Это позволяет избежать проблем, связанных с незначительными различиями между нативными и JavaScript командами, включая ограничения безопасности. В начале 2012 года Саймон Стюарт (изобретатель WebDriver), в то время работавший в Google, и Дэвид Бернс из Mozilla вели переговоры с W3C о стандартизации WebDriver как интернет-стандарта. В июле 2012 года был опубликован рабочий проект, а в июне 2018 года последовала рекомендация. Selenium WebDriver (Selenium 2.0) полностью реализован и поддерживается на языках JavaScript (Node.js), Python, Ruby, Java, Kotlin и C#. По состоянию на 2021 год Selenium 4 находится на стадии кандидата в релиз.
Селеновая решетка
Selenium Grid — это сервер, позволяющий тестам использовать экземпляры веб-браузеров, работающие на удаленных машинах. В Selenium Grid один сервер выступает в роли центрального узла (хаба). Тесты обращаются к хабу для получения доступа к экземплярам браузеров. Хаб содержит список серверов, предоставляющих доступ к экземплярам браузеров (узлы WebDriver), и позволяет тестам использовать эти экземпляры. Selenium Grid позволяет запускать тесты параллельно на нескольких машинах и централизованно управлять различными версиями и конфигурациями браузеров (вместо управления ими в каждом отдельном тесте). Возможность запуска тестов на удаленных экземплярах браузеров полезна для распределения нагрузки тестирования между несколькими машинами, а также для запуска тестов в браузерах, работающих на разных платформах или операционных системах. Последнее особенно полезно, когда не все браузеры, используемые для тестирования, могут быть запущены на одной платформе.