Selenium делает автоматизацию браузеров проще и лучше
Нет сомнений в том, что Selenium является одним из лучших предприятий автоматизации в индустрии тестирования качества. В этой статье будут освещены некоторые функции ранней версии Selenium 4, выпущенной до выпуска. Вы можете скачать Selenium 4 Alpha из репозитория Maven , а код этой статьи доступен по адресу https://github.com/RexJonesII/blog .
Все компоненты в Selenium Suite имеют что-то новое, включая Selenium IDE, Selenium WebDriver и Selenium Grid.
- Selenium IDE позволяет пользователям записывать, воспроизводить, редактировать и отлаживать тест.
- Selenium WebDriver — это API, который позволяет нам создавать и выполнять тестовые сценарии.
- Selenium Grid помогает нам проводить наш тест одновременно на нескольких браузерах, операционных системах и компьютерах.
Вам также могут понравиться: Компоненты Selenium Automation Tool
Selenium WebDriver
В большинстве случаев, когда люди говорят Selenium, они имеют в виду Selenium WebDriver, поэтому давайте начнем с Selenium WebDriver.
W3C протокол WebDriver
По словам Саймона Стюарта, руководителя проекта Selenium, протокол W3C WebDriver является причиной обновления до Selenium 4. Он незначительно отличается от исходного протокола JSON Wire. Одним из преимуществ является наш тест, который работает последовательно между браузерами. Стандартизация W3C способствует совместимости между различными реализациями программного обеспечения WebDriver API.
Основное отличие Selenium от принятия протокола W3C заключается в том, как создаются сеансы и взаимодействия элементов с использованием API действий. С помощью API действий мы можем выполнять несколько действий одновременно. Вот снимок экрана привязок языка Selenium Client и WebDriver, драйверов браузеров и веб-браузеров без исходного протокола JSON Wire.
Новое окно / вкладка
Selenium 4 предоставляет нам возможность работать с несколькими вкладками и окнами. Мы можем использовать метод newWindow
( WindowType typeHint
). Этот метод создает новое окно браузера и переключает фокус на новое окно браузера. Это удобно, если мы решим загрузить новое окно / вкладку, а затем открыть другую страницу и выполнить действие. Следующие тестовые сценарии загружают новую вкладку и окно через TestProject .
Джава
1
public class NewTabTest {
2
WebDriver driver;
3
4
5
public void setUp () {
6
driver = new ChromeDriver ();
7
driver.manage().window().maximize();
8
driver.get("https://blog.testproject.io/");
9
System.out.println(driver.getTitle());
10
}
11
13
public void openTestProjectPlatformNewTab () {
14
WebDriver newTab = driver.switchTo().newWindow(WindowType.TAB);
15
newTab.get("https://testproject.io/platform/");
16
System.out.println(driver.getTitle());
17
}
18
}
Новая вкладка загружается и заголовок страницы печатается после переключения на вкладку. Следующий тестовый скрипт выполняет те же шаги, но переключается в новое окно.
Джава
xxxxxxxxxx
1
public class NewWindowTest {
2
WebDriver driver;
3
4
5
public void setUp () {
6
driver = new ChromeDriver ();
7
driver.manage().window().maximize();
8
driver.get("https://blog.testproject.io/");
9
System.out.println(driver.getTitle());
10
}
11
13
public void openTestProjectPlatformNewWindow () {
14
WebDriver newWindow = driver.switchTo().newWindow(WindowType.WINDOW);
15
newWindow.get("https://testproject.io/platform/");
16
System.out.println(driver.getTitle());
17
}
18
}
Относительные локаторы
Цель «Относительных локаторов» - найти элемент относительно позиции другого элемента. Существует пять перегруженных методов с параметрами By и WebElement. В алфавитном порядке методы
- выше - элемент, расположенный над определенным элементом
- ниже - элемент, расположенный ниже определенного элемента
- рядом - элемент, расположенный рядом с определенным элементом
- toLeftOf - элемент, расположенный слева от определенного элемента
- toRightOf - элемент, расположенный справа от определенного элемента
Например, скажем, сложно найти значок красного сердца на веб-сайте CarMax . Однако раскрывающийся список «Расположение» легче найти, чем значок с красным сердцем.
Следующий тестовый скрипт находит раскрывающийся список Location, а затем использует withTagName
метод. Этот метод является параметром findElement
и возвращается RelativeBy
через RelativeLocator
. Красный значок сердца расположен справа от раскрывающегося списка Местоположение. Поэтому тестовый сценарий находит элемент, реализующий toRightOf
относительный локатор и раскрывающийся веб- элемент «Расположение». Найдя значок красного сердца, тестовый скрипт щелкает значок, чтобы загрузить страницу «Избранное».
Джава
xxxxxxxxxx
1
public class RelativeLocators {
2
WebDriver driver;
3
4
5
public void setUp () {
6
driver = new ChromeDriver ();
7
driver.manage().window().maximize();
8
driver.get("https://www.carmax.com/");
9
}
10
11
12
public void clickHeartFavoriteIcon () {
13
WebElement locationDropDown = driver.findElement(By.id("header-my-store-button"));
14
WebElement heartFavoriteIcon = driver.findElement(RelativeLocator.withTagName("svg").toRightOf(locationDropDown));
15
heartFavoriteIcon.click();
16
}
17
}
Chrome DevTools и ChromiumDriver
Chrome DevTools - это набор инструментов для разработчиков, встроенный непосредственно в браузер Chrome. К счастью, Selenium 4 предоставляет прямую линию связи с браузером через DevTools. В результате мы можем писать более стабильные локаторы и отслеживать, что происходит в браузере.
В Selenium 3 ChromeDriver и EdgeDriver унаследовали реализации от класса RemoteWebDriver. Эти реализации изменились в Selenium 4. Теперь ChromeDriver и EdgeDriver наследуются от ChromiumDriver. Класс ChromiumDriver содержит несколько методов для установления соединения с DevTools.
Кроме того, в Selenium 4 есть класс DevTools. Целью DevTools является повышение производительности. Некоторые из возможностей включают в себя:
- Просмотр DOM
- Обработка параметров разработчика
- Добавление слушателей
- Создание сеанса
- Проверка сетевой активности
- Эмуляция сетевых подключений
- Измерение производительности
Selenium Grid
Selenium Grid 4 имеет новую архитектуру, поддерживающую четыре отдельных процесса: Маршрутизатор, Распределитель, Карта сеанса и Узел. В Selenium 2 концентратор включал три таких процесса (Маршрутизатор, Дистрибьютор, Карта сеансов).
- Маршрутизатор - прослушивает новый запрос сеанса
- Дистрибьютор - выбирает узел для запуска нашего теста
- Карта сеанса - отвечает за сопоставление идентификатора сеанса с узлом
- Узел - тестовая машина, на которой выполняется тестовый скрипт
Более того, Selenium Grid 4 позволяет наблюдать и обновляться, чтобы быть более современным. Наблюдаемость позволяет нам отслеживать и регистрировать, что происходит. Когда поступит запрос, появится идентификатор трассировки, который поможет нашим усилиям по отладке.
Современные средства Selenium Grid будут более удобны для современных технологий, таких как Docker и Kubernetes. Мы можем использовать Docker, который позволяет нам масштабировать сетку, а Kubernetes - настраивать грид-машину. Сетка может использовать преимущества таких инфраструктур, как AWS и Azure. Будет проще использовать виртуальные машины.
Selenium IDE
В прошлом Selenium IDE была доступна только как расширение Firefox с использованием файла XPI. XPI - это кроссплатформенная сжатая установка, используемая приложением Mozilla, включая Firefox. Mozilla перестала использовать файл XPI, и Selenium IDE перестала работать для Firefox. В качестве возрождающегося Selenium IDE теперь называется Selenium IDE TNG (Следующее поколение). Он доступен как расширение для Firefox и Chrome .
Селекторы резервного элемента полезны при внесении изменений в веб-приложение. Selenium IDE записывает наш тест, используя несколько локаторов. В результате наш тест будет по-прежнему проходить с использованием резервного элемента выбора, если разработчик изменяет элемент. Например, Selenium IDE записывает тест с локатором XPath, локатором CSS, локатором id и т. Д., Чтобы наш тест не провалился. Это обеспечивает стабильность стабильного тестового сценария.
Экспорт кода - полезная функция, но не новая. Это позволяет инженеру экспортировать команды Selenium IDE в язык программирования и среду тестирования. План состоит в том, чтобы поддерживать все официальные языковые привязки для Selenium: C #, Java, JavaScript, Python и Ruby.
Возможность включения потоков управления (условная логика и циклы) доступна в Selenium IDE. Это предлагает мощный набор опций для выполнения наших тестовых скриптов. Условные операторы определяют, что будет дальше, если условие будет выполнено или не выполнено. Цикл выполняет оператор (ы) определенное количество раз в программе. Вот список условий и циклов, предоставляемых Selenium IDE:
- Conditionals
- if - выполняет оператор, когда условие истинно
- else if - выполняется только когда первое условие if ложно
- else - расширяет условие if, если условие ложно
- Loops
- repeat if - выполнить блок операторов, затем определить, является ли условие истинным, а затем повторить, если оно истинное. Выполнить блок операторов хотя бы один раз
- while - только выполнить блок операторов, если условие истинно
- times - определяет, сколько раз условие / блок операторов должен выполняться
Условия в нашем приложении проверяются с помощью выражений JavaScript. Мы можем запустить скрипт execute или скрипт async, чтобы запустить JavaScript и сохранить результат в переменной. На следующем снимке экрана показаны выражения JavaScript непосредственно в команде Control Flow if.
Для получения дополнительной информации просмотрите журнал изменений, чтобы увидеть обновления, касающиеся каждого языка программирования:
- C # - https://github.com/SeleniumHQ/selenium/blob/master/dotnet/CHANGELOG
- Java - https://github.com/SeleniumHQ/selenium/blob/master/java/CHANGELOG
- JavaScript - https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md
- Python - https://github.com/SeleniumHQ/selenium/blob/master/py/CHANGES
- Рубин - https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES