Selenium — это зонтичный проект с открытым исходным кодом , включающий ряд инструментов и библиотек, предназначенных для поддержки автоматизации браузера . [3] Он предоставляет инструмент воспроизведения для создания функциональных тестов в большинстве современных веб-браузеров без необходимости изучения языка сценариев тестирования (Selenium IDE). [4] Он также предоставляет тестовый предметно-ориентированный язык (Selenese) для написания тестов на ряде популярных языков программирования, включая JavaScript ( Node.js ), C# , Groovy , Java , Perl , PHP , Python , Ruby и Scala . Selenium работает на Windows , Linux и macOS . Это программное обеспечение с открытым исходным кодом , выпущенное по лицензии Apache License 2.0 .
Selenium — это платформа автоматизации с открытым исходным кодом для веб-приложений, позволяющая тестировщикам и разработчикам автоматизировать взаимодействие с браузером и выполнять функциональное тестирование. Благодаря универсальным инструментам, таким как WebDriver, Selenium поддерживает различные языки программирования и облегчает кроссбраузерное тестирование, что делает его идеальным выбором для эффективной и масштабируемой веб-автоматизации.
Selenium изначально был разработан Джейсоном Хаггинсом в 2004 году как внутренний инструмент в ThoughtWorks . [5] Позже к Хаггинсу присоединились другие программисты и тестировщики из ThoughtWorks, прежде чем к команде присоединился Пол Хэммант и возглавил разработку второго режима работы, который позже стал «Selenium Remote Control» (RC). В том же году исходный код инструмента был открыт.
В 2005 году Дэн Фабулич и Нельсон Спроул (с помощью Пэта Лайтбоди) сделали предложение принять серию патчей, которые превратят Selenium-RC в то, чем он стал наиболее известен. На том же заседании управление Selenium как проектом продолжится в качестве комитета, а представителями ThoughtWorks станут Хаггинс и Хаммант. [6]
В 2007 году Хаггинс присоединился к Google. Вместе с другими людьми, такими как Дженнифер Беван, он продолжил разработку и стабилизацию Selenium RC. В то же время Саймон Стюарт из ThoughtWorks разработал превосходный инструмент автоматизации браузера под названием WebDriver. В 2009 году после встречи разработчиков на конференции Google Test Automation Conference было решено объединить два проекта и назвать новый проект Selenium WebDriver или Selenium 2.0. [7]
В 2008 году Филипп Ханригу (тогда работавший в ThoughtWorks) создал «Selenium Grid», который представляет собой концентратор, позволяющий одновременно запускать несколько тестов Selenium на любом количестве локальных или удаленных систем, тем самым минимизируя время выполнения тестов. Grid предлагал как открытый исходный код возможности, аналогичные внутреннему/частному облаку Google для Selenium RC. Пэт Лайтбоди уже создал частное облако для HostedQA, которое впоследствии продал компании Gomez, Inc.
Название «Селен» происходит от шутки, которую Хаггинс написал в электронном письме, высмеивая конкурента по имени Меркьюри , говоря, что отравление ртутью можно вылечить, принимая добавки селена. Остальные, получившие письмо, взяли это имя и побежали с ним. [8]
Selenium состоит из нескольких компонентов, каждый из которых играет определенную роль в разработке автоматизации тестирования веб-приложений . [9]
Selenium IDE — это полная интегрированная среда разработки (IDE) для тестов Selenium. Он реализован как надстройка Firefox и как расширение Chrome . Он позволяет записывать, редактировать и отлаживать функциональные тесты. Ранее он был известен как Selenium Recorder. Selenium-IDE был первоначально создан Шинья Касатани и передан в дар проекту Selenium в 2006 году. Selenium IDE начал активно поддерживаться в 2018 году. [10] [11] [12] [13]
Сценарии можно автоматически записывать и редактировать вручную, обеспечивая поддержку автозаполнения и возможность быстрого перемещения команд. Скрипты записываются на Selenese , специальном языке тестовых сценариев для Selenium. Selenese предоставляет команды для выполнения действий в браузере (нажмите ссылку, выберите вариант) и для получения данных с результирующих страниц. Selenese служит языком для создания команд Selenium, которые используются при тестировании веб-приложений. Эти команды, адаптированные к HTML-тегам элементов пользовательского интерфейса, облегчают проверку их существования. Они помогают Selenium понять конкретные действия или операции, которые необходимо выполнить.
В качестве альтернативы написанию тестов на Selenese тесты также можно писать на различных языках программирования. Затем эти тесты взаимодействуют с Selenium, вызывая методы в Selenium Client API. В настоящее время 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 должен работать непрерывно. [14]
Selenium Remote Control представлял собой рефакторинг Driven Selenium или Selenium B, разработанный Полом Хаммантом, которого Джейсон считал соавтором Selenium. Исходная версия напрямую запускала процесс для рассматриваемого браузера с тестового языка Java, .NET, Python или Ruby. Проводной протокол (в свое время называвшийся «Selenese») был повторно реализован в каждом языковом порту. После рефакторинга, проведенного Дэном Фабуличем и Нельсоном Спроулом (с помощью Пэта Лайтбоди), между сценарием экзамена по вождению и браузером появился промежуточный процесс-демон. Среди преимуществ — возможность управлять удаленными браузерами и меньшая необходимость портировать каждую строку кода на постоянно растущее число языков. Selenium Remote Control полностью заменил линейку кода Driven Selenium в 2006 году. Шаблон браузера для «Driven»/«B» и «RC» представлял собой ответ/запрос, который впоследствии стал известен как Comet .
Selenium RC долгое время служил флагманской средой тестирования всего проекта Selenium. И, что немаловажно, [ редакторская статья ] Selenium RC — это первый и главный автоматизированный инструмент веб-тестирования, который позволяет пользователям использовать предпочитаемый ими язык программирования. [15] [16]
С выпуском Selenium 2 поддержка Selenium RC была официально прекращена в пользу Selenium WebDriver.
В основе Selenium лежит Selenium WebDriver, интерфейс для написания инструкций, которые взаимозаменяемы в разных браузерах. Это преемник Selenium RC. Selenium WebDriver принимает команды (отправленные на Selenese или через клиентский API) и отправляет их в браузер. Это реализуется с помощью драйвера браузера, специфичного для браузера, который отправляет команды браузеру и получает результаты. Большинство драйверов браузера фактически запускают и получают доступ к приложению браузера (например , Firefox , Google Chrome , Internet Explorer , Safari или Microsoft Edge ); Существует также драйвер браузера HtmlUnit , который имитирует браузер с помощью безголового браузера HtmlUnit.
В отличие от Selenium 1, где для запуска тестов требовался сервер Selenium, Selenium WebDriver не требует специального сервера для выполнения тестов. Вместо этого WebDriver напрямую запускает экземпляр браузера и управляет им. Однако Selenium Grid можно использовать с WebDriver для выполнения тестов на удаленных системах (см. ниже). Там, где это возможно, WebDriver использует встроенные функции уровня операционной системы, а не команды JavaScript на основе браузера для управления браузером. Это позволяет обойти проблемы с тонкими различиями между собственными командами и командами JavaScript, включая ограничения безопасности. [17]
По состоянию на начало 2012 года Саймон Стюарт (изобретатель WebDriver), который тогда работал в Google, и Дэвид Бернс из Mozilla вели переговоры с W3C о том, чтобы сделать WebDriver стандартом Интернета. В июле 2012 года был выпущен рабочий проект, а в июне 2018 года последовали рекомендации. [18] Selenium WebDriver (Selenium 2.0) полностью реализован и поддерживается в JavaScript ( Node.js ), Python , Ruby , Java , Kotlin и C# . По состоянию на 2021 год Selenium 4 является кандидатом на выпуск. [19]
Ниже приведены некоторые из самых простых инструкций, которые можно сделать:
из selenium import webdriver из selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.expected_conditions import Presence_of_element_located#Для этого примера требуется Selenium WebDriver 3.13 или новее с webdriver . Firefox () в качестве драйвера : wait = WebDriverWait ( driver , 10 ) драйвер . получить ( «https://google.com/ncr» ) драйвер . find_element ( по ИМЯ , " q" ) . send_keys ( «сыр» + Ключи . ВОЗВРАТ ) first_result = ожидание . до ( presence_of_element_located (( By . CSS_SELECTOR , "h3" ))) print ( first_result . get_attribute ( "textContent" ))
импортировать org.openqa.selenium.By ; импортировать org.openqa.selenium.Keys ; импортировать org.openqa.selenium.WebDriver ; импортировать org.openqa.selenium.WebElement ; импортировать org.openqa.selenium.firefox.FirefoxDriver ; импортировать org.openqa.selenium.support.ui.WebDriverWait ; импортировать статический org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated ; импортировать java.time.Duration ; общественный класс HelloSelenium { public static void main ( String [] args ) { драйвер WebDriver = новый FirefoxDriver (); WebDriverWait wait = новый WebDriverWait ( драйвер , Duration . ofSeconds ( 10 )); попробуйте { драйвер . получить ( «https://google.com/ncr» ); Водитель . findElement ( По .имя ( "q" )) . sendKeys ( "сыр" + Keys . ENTER ); WebElement firstResult = подождите . до ( presenceOfElementLocated ( By . cssSelector ( "h3" ))); Система . вне . println ( firstResult.getAttribute ( "textContent" ) ) ; } Наконец { драйвер . покидать (); } } }
используя систему ; использование OpenQA.Selenium ; использование OpenQA.Selenium.Firefox ; использование OpenQA.Selenium.Support.UI ; класс HelloSelenium { static void Main () { using ( драйвер IWebDriver = новый FirefoxDriver ()) { WebDriverWait wait = новый WebDriverWait ( драйвер , TimeSpan . FromSeconds ( 10 )); Водитель . Навигация (). GoToUrl ( "https://www.google.com/ncr" ); Водитель . НайтиЭлемент ( По.Имя ( "q" ) ) . SendKeys ( " сыр" + Keys.Enter ) ; ждать . До ( webDriver => webDriver . FindElement ( By . CssSelector ( «h3» )). Отображается ); IWebElement firstResult = драйвер . FindElement ( By.CssSelector ( "h3" ) ) ; Консоль . WriteLine ( firstResult . GetAttribute ( "textContent" )); } } }
Selenium Grid — это сервер, который позволяет тестам использовать экземпляры веб-браузера, работающие на удаленных машинах. В Selenium Grid один сервер действует как центральный узел. Тесты связываются с хабом для получения доступа к экземплярам браузера. Хаб имеет список серверов, которые предоставляют доступ к экземплярам браузера (узлам WebDriver), и позволяет тестам использовать эти экземпляры. Selenium Grid позволяет запускать тесты параллельно на нескольких машинах и централизованно управлять различными версиями браузера и его конфигурациями (а не в каждом отдельном тесте).
Возможность запускать тесты на удаленных экземплярах браузера полезна для распределения нагрузки тестирования на несколько компьютеров и запуска тестов в браузерах, работающих на разных платформах или операционных системах. Последнее особенно полезно в тех случаях, когда не все браузеры, которые будут использоваться для тестирования, могут работать на одной и той же платформе. [20]
Selenium был назван так потому, что Хаггинс, недовольный инструментами тестирования, представленными на рынке, искал название, которое позиционировало бы продукт как альтернативу коммерческому программному обеспечению для тестирования Mercury Interactive QuickTest Professional.
По словам Хаггинса, название «Селен» было выбрано потому, что минеральные добавки селена служат лекарством от отравления ртутью.
{{cite web}}
: |last=
имеет общее имя ( справка )