Selenide java выбор браузера

Обновлено: 30.06.2024

Автор оригинала: Olawale Aladeusi.

Я потратил довольно много времени на то, чтобы понять, как настроить сетку selenium. Поэтому я решил изложить то, что узнал, в письменном виде. В этой статье я расскажу о некоторых шагах по настройке selenium grid. Вам не нужно быть экспертом по селену, чтобы понять эту статью, единственное, что вам нужно знать, это как написать базовый код JAVA.

Прежде чем мы начнем, давайте обсудим некоторые основные концепции

Что такое селен?

Что такое Селеновая сетка?

Selenium-Grid позволяет вам запускать тесты на разных компьютерах в разных браузерах параллельно(в одно и то же время). То есть одновременное выполнение нескольких тестов на разных машинах с разными браузерами и операционными системами. Селеновая сетка поддерживает распределенное выполнение тестов. Подробнее читайте здесь . Selenium Grid использует концепцию узла-концентратора, в которой вы запускаете тест только на одной машине, называемой концентратором, но выполнение будет выполняться разными машинами, называемыми узлами.

Что такое концентратор и узел сети Selenium?

Что такое веб-драйвер Selenium?

Что такое тестирование?

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

Что такое Apache Maven?

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

Зависимости

Прежде чем вы сможете завершить эту статью, в вашей системе должно быть установлено следующее

Выполните следующие действия на своем терминале, чтобы проверить, установлена ли в вашей системе среда выполнения Java и Maven

Результат должен быть похож на этот

Установив все зависимости, давайте начнем с настройки и запуска концентратора и узла selenium grid.

Настройка концентратора Selenium Grid

ШАГ 1 Загрузите автономный сервер selenium и поместите его в любой каталог на тестовой машине, позвольте позвонить на нашу тестовую машину Машина А . Нажмите здесь , чтобы загрузить последнюю версию selenium standalone server. Автономный сервер Selenium-это единственное, что нам нужно для запуска нашего хаба.

Прежде чем продолжить, запишите IP-адрес вашей тестовой машины(машина A). Если вы используете систему mac, вы можете использовать следующую команду для проверки своего IP-адреса

и если вы используете оконную систему, выполните следующую команду в командной строке, чтобы получить свой IP-адрес

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

ШАГ 2 Теперь давайте запустим наш хаб . Откройте терминал или командную строку, если вы используете ОС windows, и измените каталог, в котором вы сохранили автономный сервер selenium, загруженный в ШАГ 1 .

Затем выполните следующую команду

После выполнения команды вы должны увидеть что-то похожее на приведенное ниже

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

Когда вы закончите загрузку драйверов, если ваша вторая машина работает под управлением ОС windows, вы можете создать папку selenium на диске C и поместить в нее все драйверы.

Откройте командную строку или терминал, в зависимости от обстоятельств, на машине B и выполните следующие команды, чтобы запустить узел

Примечание: ШАГ 3 должен быть выполнен на виртуальной машине или на второй машине, если вы не используете виртуальную машину.

Если все прошло хорошо, после выполнения приведенной выше команды вы должны увидеть что-то похожее на изображение ниже

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

Что мы собираемся проверить?

Тестовые Зависимости

Создание Тестового Проекта На IntelliJ

Теперь давайте добавим в проект следующие плагины

Добавить плагины в проект Добавить следующий код в проект pom.xml (файл находится в корневом каталоге проекта) файл;

Затем создайте новый пакет в <имя_проекта>/src/main/java/ и назовите его base (внутри этого пакета мы создадим класс, который настроит наш тестовый драйвер). Когда вы закончите, создайте класс java внутри базового пакета и назовите его Драйвер настройки . Добавьте следующий код в SetupTestDriver класс

Теперь, когда у нас есть SetupTestDriver класс полностью настроен, давайте создадим простой тест java для проверки окна поиска Google.

создайте новый тестовый класс в src/test/java , мы можем назвать его Тест поиска Google

Добавьте в класс следующий код

Создайте новый пакет ресурсов в src/test/ , назовем его ресурсы. Создайте новый пакет внутри ресурсы , назовем его пусковые установки - в нем будут размещены наши файлы пусковых установок тестов. Создайте другой файл google.xml внутри пакета пусковых установок.

Добавьте следующее в google.xml

Бежать

Чтобы запустить тест, откройте google.xml и щелкните по нему правой кнопкой мыши, затем выберите Бежать

1. открыть(страницу)
2. $(элемент).совершитьДействие()
3. $(элемент).проверитьУсловие()

Используй мощь IDE!

Весь Selenide API состоит из небольшого числа классов. Мы предлагаем прекратить читать, открыть твою любимую IDE и просто начать печатать.

Просто набери: $(selector). - и IDE предложит все возможные опции.

Selenide API: Просто начни писать

Используй всю мощь современных средств разработки вместо того, чтобы забивать себе голову документацией!

Selenide API

Для справки, ниже приведены некоторые классы Selenide с описанием основных определенных в них методов, которые тебе, возможно, понадобятся:

com.codeborne.selenide.Selenide [src] [javadoc]

Ядро библиотеки Selenide. Основные методы - это open , $ и $$ :

Обычно, когда ты получаешь с помощью доллара объект SelenideElement, ты можешь либо совершить с ним какое-то действие:

и даже несколько действий сразу:

либо проверить какое-то условие:

“Два доллара” же может быть удобно использовать когда нужный элемент является одним из группы однотипных элементов. Например вместо:

можно использовать более читабельный и лаконичный вариант:

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

Не стесняйся поискать и найти намного больше методов внутри класса Selenide, которые могут тебе понадобиться;), просто набрав в любимом IDE Selenide. ,

Более подробная информация доступна в Selenide gitbook

com.codeborne.selenide.SelenideElement [src] [javadoc]

Класс SelenideElement - описывает элемент найденный на странице. Его обьект можно например получить с помощью команды $ . В классе описанны следующие полезные методы.

Методы поиска внутренних элементов

  • find(String cssSelector) / $(String cssSelector)
  • find(By) / $(By)
  • findAll(String cssSelector) / $$(String cssSelector)
  • findAll(By) / $$(By)

Здесь $ и $$ просто лаконичные “алиасы” (синонимы) для соответствующих команд.

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

Методы-проверки состояния элемента - assertions

  • should(Condition) / shouldBe(Condition) / shouldHave(Condition)
  • shouldNot(Condition) / shouldNotBe(Condition) / shouldNotHave(Condition)

Рекомендуется выбирать такой метод, чтобы строка кода легко воспринималась, как обычная фраза, например:

Проверки играют роль явных ожиданий (explicit waits) в Selenide. Они ждут до удовлетворения условия (visible, enabled, text(“some text”)) пока не истечет таймаут (значение Configuration.timeout , которое установлено по умолчанию в 4000 миллисекунд).

Есть версия явных ожиданий с указанием таймаута:

  • should(Condition, Duration.ofMillis(25_000))
  • shouldBe(Condition, Duration.ofSeconds(25))

Методы-действия над элементом

  • click()
  • doubleClick()
  • contextClick()
  • hover()
  • setValue(String) / val(String)
  • pressEnter()
  • pressEscape()
  • pressTab()
  • selectRadio(String value)
  • selectOption(String)
  • append(String)
  • dragAndDropTo(String)

Методы получения статусов элементов и значений их атрибутов

  • getValue() / val()
  • data()
  • attr(String)
  • text() // возвращает “видимый текст на странице”
  • innerText() // возвращает “текст элемента в DOM”
  • getSelectedOption()
  • getSelectedText()
  • getSelectedValue()
  • isDisplayed() //возвращает false, если элемент либо невидимый, либо его нет в DOM
  • exists() //возвращает true, если элемент есть в DOM, иначе - false

Другие полезные команды

  • uploadFromClasspath(String fileName)
  • download()
  • toWebElement()
  • uploadFile(File…)

Более подробная информация доступна в Selenide gitbook

com.codeborne.selenide.Condition [src] [javadoc]

Условия используются в конструкциях should / shouldNot. Мы рекомендуем статически импортировать используемые условия, чтобы получить все преимущества читаемого кода.

Более подробная информация доступна в Selenide gitbook

com.codeborne.selenide.Selectors [src] [javadoc]

Класс содержит некоторые By селекторы для поиска элементов по тексту или атрибуту (которых не хватает в стандартном Selenium WebDriver API):

    - поиск элемента по точному тексту - поиск элемента по тексту (подстроке) - поиск элемента по атрибуту - поиск по атрибуту “title” - поиск по атрибуту “value”

Более подробная информация доступна в Selenide gitbook

com.codeborne.selenide.ElementsCollection [src] [javadoc]

Класс ElementsCollection - описывает коллекцию элементов на странице, которую обычно можно получить с помощью вызова $$ . Класс предоставляет набор весьма полезных методов.

Методы-проверки - assertions

Проверки играют роль явных ожиданий (explicit waits). Они ждут до удовлетворения условия (size, empty) пока не истечет таймаут (значение Configuration.collectionsTimeout , которое установлено по умолчанию в 6000 миллисекунд).

Методы получения статусов и значений коллекции элементов

  • size()
  • isEmpty()
  • getTexts() // возвращает массив видимых текстов, e.g. для элементов <li>a</li><li hidden>b</li><li>c</li> вернет массив вида [“a”, “”, “c”]

Методы выборки внутренних элементов

Более подробная информация доступна в Selenide gitbook

com.codeborne.selenide.CollectionCondition [src] [javadoc]

Условия используются в конструкциях shouldBe / shouldHave для коллекции - объекта ElementsCollection. Рекомендуется статически импортировать используемые условия, чтобы получить все преимущества читаемого кода.

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

Некоторые из распространенных случаев использования автоматизации веб-браузера могут быть:

  • Автоматизация ручных тестов в веб-приложении
  • Автоматизация повторяющихся задач, таких как удаление информации с веб-сайтов
  • Заполнение HTML-форм, выполнение некоторых административных заданий и т. Д

Что такое Селен?

Selenium IDE-это чисто инструмент для воспроизведения записей, который поставляется в качестве плагина Firefox и расширения Chrome. Selenium RC был устаревшим инструментом, который сейчас обесценился. Selenium WebDriver-это новейший и широко используемый инструмент.

Примечание : Термины Selenium , Selenium WebDriver или просто WebDriver используются взаимозаменяемо для обозначения Selenium WebDriver.

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

Зачем использовать Селен?

В этом уроке мы узнаем, как использовать привязки Java Selenium WebDriver . Мы также рассмотрим API WebDriver .

Успех Selenium также можно объяснить тем фактом, что спецификации WebDriver стали рекомендацией W3C для браузеров.

Предпосылки:

  • Среда Java и ваша любимая среда разработки Java

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

В этом уроке мы будем управлять Google Chrome.

Веб-драйвер

Прежде чем двигаться дальше, полезно понять несколько концепций, которые приводят в замешательство новичков. WebDriver не является классом , это интерфейс .

Все зависящие от браузера драйверы, такие как ChromeDriver , FirefoxDriver , InternetExplorerDriver , являются Java классами , которые реализуют интерфейс WebDriver|/. Эта информация важна, потому что, если вы хотите запустить свою программу в другом браузере, вам не нужно менять кучу кода, чтобы он работал, вам просто нужно поменять WebDriver для любого браузера, который вы хотите.

Как мы видим, драйвер содержит ссылку на ChromeDriver и, следовательно, может использоваться для управления браузером. Когда будет выполнено приведенное выше утверждение, вы должны увидеть, как в вашей системе откроется новое окно браузера. Но браузер еще не открыл ни одного веб-сайта. Нам нужно дать указание браузеру сделать это.

Примечание : Для использования другого WebDriver вам необходимо указать путь к драйверу в файловой системе, а затем создать его экземпляр. Например, если вы хотите использовать IE, то вот что вам нужно сделать:

Переход на Веб-сайт

Как упоминалось выше, сначала нам нужно перейти на ваш целевой веб-сайт. Для этого мы просто отправляем запрос GET на URL-адрес веб-сайта:

ВебЭлемент

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

Селеновым представлением таких HTML-элементов является Веб-элемент . Как и WebDriver , WebElement также является интерфейсом Java. Как только мы получим WebElement , Мы сможем выполнить с ними любую операцию, которую может выполнить конечный пользователь, например, щелкнуть, ввести, выбрать и т. Д.

Очевидно, что попытка выполнить недопустимые операции, например, ввести текст в элемент кнопки, приведет к исключению.

Мы можем использовать HTML-атрибуты элемента, такие как идентификатор , класс и имя , чтобы найти элемент. Если таких атрибутов нет, мы можем использовать некоторые продвинутые методы определения местоположения, такие как CSS-селекторы и XPath .

Как мы видим, элемент имеет <вход> тег и несколько атрибутов, таких как идентификатор , класс и т.д.

WebDriver поддерживает 8 различных локаторов для поиска элементов:

  • идентификатор
  • Имя класса
  • имя
  • тагНаме
  • Текст ссылки
  • Частичная ссылка на текст
  • cssSelector*
  • xpath

Давайте рассмотрим их все по очереди, автоматизировав различные элементы на нашем целевом веб-сайте.

Определение местоположения элементов с помощью идентификатора

Если мы проверим поле ввода информационного бюллетеня на нашем целевом веб-сайте, мы сможем обнаружить, что у него есть атрибут id :

Мы можем найти этот элемент с помощью идентификатора локатора:

Поиск элементов по имени класса

Если мы проверим то же поле ввода, мы увидим, что оно также имеет атрибут class .

Мы можем найти этот элемент, используя имя класса локатор:

Определение местоположения элементов по имени

Для этого примера давайте представим выпадающий список, в котором пользователь должен выбрать свой возрастной диапазон. В раскрывающемся списке есть атрибут name , который мы можем найти:

Мы можем найти этот элемент, используя имя локатор:

Определение местоположения элементов с помощью xpath

Однако иногда эти подходы устаревают, так как существует несколько элементов с одним и тем же атрибутом:

В этих случаях мы можем использовать Локаторы XPath . XPath-это очень мощные локаторы, и они сами по себе являются полной темой. Следующий пример может дать вам представление о том, как создать XPath для приведенных выше фрагментов HTML:

Поиск элементов с помощью селектора css

Опять же, давайте представим список флажков, в которых пользователь выбирает предпочитаемый язык программирования:

Технически, для этого фрагмента HTML мы можем легко использовать имя локатор, поскольку они имеют разные значения. Однако в этом примере мы будем использовать селекторы css для поиска этого элемента, который широко используется во интерфейсе с такими библиотеками, как jQuery.

Следующий пример может дать вам представление о том, как создавать селекторы CSS для предыдущего фрагмента HTML:

Очевидно, это очень похоже на подход XPath.

Поиск элементов с помощью linkText

Мы можем найти ссылку по ее тексту:

Поиск элементов с помощью partialLinkText

В этих случаях мы можем использовать partialLinkText локатор:

Определение местоположения элементов с помощью tagName

Мы также можем найти элемент, используя его имя тега, например , , <ввод> , <выбор> и т. Д. Вы должны использовать этот локатор с осторожностью. Поскольку может быть несколько элементов с одинаковым именем тега, и команда всегда возвращает первый соответствующий элемент на странице:

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

Взаимодействие с элементами

Щелчок по элементам

Мы выполняем операцию щелчка с помощью метода click () . Мы можем использовать это на любом веб-элементе , если он доступен для кликабельности. Если нет, это вызовет исключение.

В этом случае давайте перейдем по ссылке домашняя страница :

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

Ввод Текста

Давайте введем некоторый текст в поле ввода Электронная почта :

Выбор Переключателей

Поскольку переключатели просто нажимаются, мы используем метод click() для выбора одной из них:

Установка Флажков

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

Выбор элементов из выпадающего списка

Чтобы выбрать элемент из выпадающего списка, нам нужно будет сделать две вещи:

Во-первых, нам нужно создать экземпляр Выбрать и передать ему элемент со страницы:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Затем мы можем выбрать элемент, используя его:

Отображаемый текст :

Значение (атрибут значение ):

Индекс (начинается с 0):

Если приложение поддерживает множественный выбор, мы можем вызвать один или несколько из этих методов несколько раз, чтобы выбрать различные элементы.

Чтобы проверить, позволяет ли приложение выполнять несколько вариантов выбора, мы можем запустить:

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

Мы также можем сделать это с помощью Select :

Получение Значений Атрибутов

Чтобы получить значение определенного атрибута в элементе:

Установка Значений Атрибутов

Мы также можем задать значение определенного атрибута в элементе. Это может быть полезно там, где мы хотим включить или отключить какой-либо элемент:

Взаимодействие с мышью и клавиатурой

API WebDriver предоставил класс Действия для взаимодействия с мышью и клавиатурой.

Во-первых, нам нужно создать экземпляр Действия и передать ему экземпляр WebDriver :

Перемещение мыши

Иногда нам может потребоваться навести курсор на пункт меню, в котором отображается пункт подменю:

Перетаскивание

Перетаскивание элемента поверх другого элемента:

Перетаскивание элемента на несколько пикселей (например, 200 пикселей по горизонтали и 0 пикселей по вертикали):

Нажатие Клавиш

Удерживайте определенную клавишу при вводе некоторого текста, например, клавиши Shift :

Выполните такие операции, как Ctrl+a , Ctrl+c , Ctrl+v и ВКЛАДКА :

Взаимодействие с браузером

Получение источника страницы

Скорее всего, вы будете использовать это для очистки веб-страниц:

Получение заголовка страницы

Максимизация браузера

Увольнение водителя

Важно выйти из драйвера в конце программы:

Примечание : API WebDriver также предоставляет метод close () , и иногда это сбивает с толку новичков. Метод close() просто закрывает браузер и может быть снова открыт в любое время. Это не уничтожает объект WebDriver . Метод quit() более подходит, когда вам больше не нужен браузер.

Делать Скриншоты

Во-первых, нам нужно привести WebDriver к TakesScreenshot типу, который является интерфейсом . Далее мы можем вызвать getScreenshotAs() и передать OutputType.ФАЙЛ .

Наконец, мы можем скопировать файл в локальную файловую систему с соответствующими расширениями, такими как *.jpg,*. png и т.д.

Выполнение JavaScript

Мы также можем ввести или выполнить любой допустимый фрагмент JavaScript через Selenium WebDriver. Это очень полезно, так как позволяет вам делать многие вещи, которые не встроены непосредственно в Селен.

Во-первых, нам нужно привести WebDriver к типу JavascriptExecutor :

Может быть несколько вариантов использования, связанных с JavascriptExecutor :

Мы также можем сначала найти элемент с помощью локаторов WebDriver и передать этот элемент в execute Script() в качестве второго аргумента. Это более естественный способ использования JavascriptExecutor :

Чтобы задать значение поля ввода:

  • Прокрутка элемента, чтобы перенести его в окно просмотра :
  • Изменение страницы (добавление или удаление некоторых атрибутов элемента):

Доступ к файлам Cookie

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

Получить все файлы cookie:

Получите конкретный файл cookie:

Добавьте файл cookie:

Удалите файл cookie:

Вывод

Мы рассмотрели все основные функции Selenium WebDriver, которые могут потребоваться при автоматизации веб-браузера. Selenium WebDriver имеет очень обширный API и охватывает все, что выходит за рамки этого руководства.







Что пишут в блогах

  • Автоматизация рутины. Скачиваем файлы через bash
  • Панбагон. 12 часов — опасное время
  • Оффер сразу после курса для тестировщиков с нуля. Что бывает, если выйти из зоны комфорта
  • Мои 12 недель в году. Часть 17 (переезд, ДР и пневмония)
  • Как тестировщику с небольшим опытом подготовиться и сдать экзамен ISTQB FL: интервью
  • Метрики в тестировании: какие выбрать и что делать, когда они становятся KPI?
  • Александр Александров про тренды и технологии тестирования, про влияние Covid19 на рынок QA
  • Зачем тестировщикам HTML и CSS и что о них нужно знать
  • Войти в айти после 30: с мороза на теплую и уютную «удаленку»
  • Ручное тестирование: что нужно знать, чтобы стать мануальным тестировщиком

Подписаться

Онлайн-тренинги

Что пишут в блогах (EN)

  • Agile Testing Days 2021 - My Heart Is Full
  • Balancing the Speaker Circuit
  • Agile Testing Days 2021 – Part 1
  • Automate for yourself first
  • I’m now a Developer Advocate!
  • Keeping the Customer Satisfied
  • Lessons Learned in Finding Bugs
  • Workshop on Built-in Quality at the Agile Testing Days
  • Increasing Understanding of Modern (Exploratory) Testing
  • The George Foreman Heuristic for Quality

Разделы портала

Про инструменты

Решил снова начать вести блог по тестированию и для привлечения внимания надо было сделать кликбейтный заголовок для статьи.

На самом деле мой коллега сделал внутренний доклад по Selenoid в нашей компании. Я позаимствовал этот заголовок и часть материала для статьи.

В далеком 2017 году я писал про настройку Selenium Grid тут. И весь 2017 — 2018 мы использовали обычный Selenium Grid без каких-либо надстроек.

Как у нас всегда выглядело распараллеливание

У нас была тачка на котрой был запущен selenium hub. У нас были 20 тачек, на которых были запущены selenium nod-ы. Обычные 20 виртуалок с windows, в которых в автозапуске был настроен bat файл, в котором запускался selenium server в режиме node и коннектился к запущенному хабу. На тачке с хабом также было настроено, что при каждом запуске стартовал selenium server в режиме hub.

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

Но обо всем этом мы забыли, когда перешли на Selenoid. Слышали мы про Selenoid давно, жаль раньше не стали использовать. Теперь весь процесс у нас выглядит так:

Запускается джоба на дженкинсе, на одной тачке с селенойдом создаются в параллель пул docker контейнеров, в которых старуют браузеры с автотестами.

Selenoid — это сервер, который позволяет запускать браузеры в docker контейнерах.

Установка Selenoid

Или скачать configuration manager с сайта aerokube и использовать команду: ./cm selenoid start —vnc ./cm selenoid start —browsers

‘firefox:51.0;firefox:55.0;chrome:66.0’ — если требуются определенные браузеры

После выполнения одной из команд сверху начнется скачивание образов браузеров, создание browsers.json и selenoid автоматически запустится.

Лимит сессий в этом случае будет равен пяти.

Если требуется задать большее количество сессий, требуется явно указать лимит: ./cm selenoid start —args «-limit 10» Также поднимаем UI: ./cm selenoid-ui start Selenoid работает на порту 4444. Selenoid-UI — 8080

Обновление Selenoid

./cm selenoid update

Конфигурация Selenoid

Selenoid конфигурируется посредством внесения изменений в файл browsers.json


2. Дефолтная версия браузера

3. Лист доступных версий браузеров

4. Версия браузера

6. Порт для прокси соединений

7. Добавление tmpfs к контейнеру (переносим кэш браузера в in-memory файловую систему, ускоряет работу)

8. URL, где создается новая сессия (в нашем случае хаб)

9. Параметр, позволяющий указать том, который будет монтироваться в контейнер из хостмашины

10. Environmental Variables (в данном случае таймзона)

11. Параметр позволяет добавить кастомную запись в /etc/hosts к запущенному контейнеру

12. Размер Shared Memory

13. Лимит ядер на контейнер

14. Лимит оперативной памяти на контейнер

UI Selenoid

Через Selenoid UI можно подключаться в реальном времени к работающему контейнеру для отладки. Также можно смотреть логи вебдрайвера и браузера. Браузером в этот момент можно управлять, без попыток угадать, на какой конкретно машине в данный момент проходит тест. (Слезно вспоминаю работу с Selenium Grid без Selenoid).

И того, следюуще плюсы Selenoid

● Установка в пару команд

● Гибкая работа с браузерами

● Удобный UI и логирование

● Готовые образы контейнеров вместе с вебдрайвером

● Легкое обновление, одна команда и у вас на всех новых создаваемых контейнерах последние версии браузеров, драйверов.

● Каждый браузер изолирован от системы

● Каждый браузер запускается чистым

● 60мб потребление RAM

Итог

Сложно даже представить насколько нам упростил работу Selenoid, учитывая что ui автотесты на selenium мы используем каждый день очень активно. С Grid-ом это было непросто, нужно было постоянно заходить на каждую из 20 тачек, обновлять браузеры, драйвера, отладка тестов была сложна.

Сейчас же у нас одна мощная така для Selenoid, на которой при запуске джобы в дженкинсе создаются 40-80 контейнеров параллельно и на них ходят автотесты. Более того, стабильность тестов тоже стала выше, так как повторюсь, что создается новый контейнер, запускается чистый браузер, в нем проходит автотест, для другого автотеста создается другой контейнер и т д. То есть автотест запускается в максимально изолированной среде. Всем, кто до сих пор использует обычный Selenium Grid и у кого уже прилично автотестов, всячески рекомендую переходить на Selenoid.

Читайте также: