Как использовать JavaScriptExecutor в Selenium

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

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

В этом блоге мы обсудим JavaScriptExecutor в Selenium и как начать с практических случаев и примеров.

Что такое JavaScriptExecutor в Selenium?

JavaScriptExecutor – это интерфейс, предоставляемый Selenium, который помогает выполнять команды JavaScript. Этот интерфейс предоставляет методы для запуска JavaScript в выбранном окне или на текущей веб-странице. Он доступен для всех языковых привязок, поддерживаемых Selenium.

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

Java

 

JavaScriptExecutor в Selenium предоставляет два метода для взаимодействия с WebElements:

  • executeScript() – этот метод выполняет JavaScript в контексте текущего выбранного окна или фрейма в Selenium. Скрипт будет выполнен как тело анонимной функции.
  • executeAsyncScript()  Этот метод выполняет асинхронный фрагмент JavaScript в контексте текущего выбранного окна или фрейма в Selenium. Скрипт будет выполнен как тело анонимной функции.

Примечание: Основное различие между методами executeScript() и executeAsyncScript() заключается в том, что скрипт, вызванный с помощью executeAsyncScript(), должен сигнализировать о завершении выполнения с помощью функции callback().

Вызов методов с использованием executeAsyncScript() в основном используется, когда необходимо выполнить ожидание в браузере под тестом или когда тесты должны быть синхронизированы в приложении AJAX.

Почему использовать JavaScriptExecutor в Selenium?

Существуют сценарии, когда некоторые команды WebDriver не работают ожидаемым образом по различным причинам, как указано ниже:

  1. Selenium не взаимодействует с элементами веб-страницы напрямую
  2. Выполнение действий, таких как прокрутка в вид, щелчок по элементам веб-страницы, скрытым под наложением, или установка значений в поля только для чтения
  3. Выполнение поведения, специфичного для браузера, такого как динамическое изменение DOM

В этих случаях мы обращаемся за помощью к JavaScriptExecutor в Selenium.

Традиционно мы используем локаторы Selenium такие как ID, Name, CSS Selector, XPath и т. д., для нахождения WebElement. Если эти локаторы не работают, или вы работаете с сложным XPath, в таких случаях JavaScriptExecutor помогает найти нужный WebElement.

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

Как известно, в браузерах реализован JavaScript и они могут понимать команды JavaScript. Поэтому понимание JavaScriptExecutor в Selenium позволит выполнять ряд операций более эффективно.

Основы JavaScriptExecutor в Selenium

Цель этого раздела – дать общее представление о шагах реализации JavaScriptExecutor в Selenium. Для демонстрации мы будем использовать Java в качестве предпочтительного языка программирования.

Давайте рассмотрим основные шаги.

1. Импортируйте пакет, связанный с JavaScriptExecutor:

Java

 

2. Используйте JavaScriptExecutor, создайте ссылку на интерфейс и присвойте ее экземпляру WebDriver, приведя тип:

Java

 

3. Вызовите методы executeAsyncScript() или executeScript() . Например, синтаксис для executeScript() приведен ниже:

Java

 

Демонстрация: Использование JavaScriptExecutor в Selenium

Прежде чем мы рассмотрим, как использовать JavaScriptExecutor в Selenium, выполните следующие предварительные требования:

  • Создайте новый проект Maven с использованием IntelliJ IDE
  • Добавьте последнюю зависимость Selenium WebDriver в pom.xml
  • Добавьте последнюю зависимость TestNG в pom.xml

Мы будем использовать веб-сайт LambdaTest eCommerce Playground для демонстрации работы JavaScriptExecutor в Selenium путем запуска тестов в локальном браузере Chrome.

Сценарий теста 1

Наша цель – написать простой код, иллюстрирующий пример с использованием метода executeScript() в следующем тестовом сценарии.

  1. Перейти на страницу Вход в учетную запись веб-сайта LambdaTest eCommerce Playground.
  2. Ввести действительные учетные данные и нажать на кнопку Вход, выделив поле красной рамкой.
  3. Вывести заголовок страницы и доменное имя.
  4. Утверждать, что заголовок страницы “Моя учетная запись” отображается при успешном входе в систему.

Реализация

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

Давайте объявим WebDriver на уровне класса, так как нам понадобится он в обоих методах: методе setup() для запуска сеанса драйвера и методе tearDown() для грациозного завершения сеанса.

Java

 

Создадим новый метод setup(), который будет создавать экземпляр класса WebDriver и соответственно устанавливать конфигурацию для запуска тестов в локальном браузере Chrome.

Java

 

Этот метод откроет браузер Chrome, максимизирует его окно и также применит неявное ожидание в 30 секунд. Это неявное ожидание позволит успешно загрузить все содержимое веб-сайта перед началом выполнения теста.


Java

 

Наконец, когда тест выполняется, будет вызван метод tearDown(), который закроет сеанс RemoteWebDriver грациозно.

Теперь добавим метод testJavaScriptExecutorCommand() в тот же тестовый класс для реализации обсуждаемого сценария тестирования.

Java

 

Код переходит на страницу входа на сайт LambdaTest eCommerce Playground. Следующая строка приводит экземпляр WebDriver к JavascriptExecutor, чтобы можно было выполнять команды JavaScript в браузере.

Java

 

Затем он находит поле emailAddressField, используя стратегию локатора id. Затем используется команда JavaScriptExecutor для выделения границы поля электронной почты красным цветом.

Java

 

Затем поле пароля находится и выделяется красной рамкой. Это выделение помогает понять, какие шаги выполняются во время выполнения автоматизированного теста.

Java

 

Точно так же кнопка “Вход” находится с использованием стратегии CSS Selector и также выделена.

Java

 

Затем заголовок страницы и доменное имя находятся с использованием JavaScriptExecutor и выводятся в консоль.

Java

 

Наконец, находится заголовок страницы “Мой аккаунт”, который отображается после успешного входа, и выполняется проверка, чтобы убедиться, что он отображает текст “Мой аккаунт“.

Вот полный код из класса TestJavaScriptExecutor:

Java

 

Тестовое выполнение

На следующем скриншоте из IntelliJ IDE показано, что тест был успешно выполнен.

Сценарий тестирования 2

Наша цель – написать простой код, чтобы проиллюстрировать пример, используя метод executeAsyncScript() с помощью следующего тестового сценария.

  1. Перейти на веб-сайт Площадка электронной торговли LambdaTest.
  2. Прокрутить вниз до нижней части домашней страницы.
  3. Утверждать, что текст “ИЗ БЛОГА” отображается в нижней части страницы.

Реализация:

Создайте новый метод testExecuteAsyncScript() в существующем классе TestJavaScriptExecutor.

Java

 

Код перейдет на домашнюю страницу веб-сайта LambdaTest eCommerce Playground. Затем будет вызван метод executeAsyncScript() объекта JavaScriptExecutor, где будет выполнено действие по прокрутке окна.

В методе executeAsyncScript() выполненные скрипты должны явно сигнализировать о завершении, вызывая предоставленный метод callback().

Java

 

После прокрутки вниз до конца окна будет найден текст “FROM THE BLOG”, и будет выполнена проверка на него.

Java

 

Выполнение теста

На следующем снимке экрана показано, что тест выполнен успешно.

Команды для использования JavaScriptExecutor в Selenium

Давайте рассмотрим несколько сценариев, которые мы могли бы обработать с помощью интерфейса JavaScriptExecutor для автоматизации тестов Selenium.

Чтобы нажать на кнопку:

Java

 

Чтобы ввести текст в текстовое поле без использования метода sendKeys() :

Java

 

Для обработки флажка, передавая значение true или false:

Java

 

Для создания всплывающего окна предупреждения в Selenium WebDriver:

Java

 

Для обновления окна браузера с помощью JavaScript:

Java

 

Для получения внутреннего текста всей веб-страницы в Selenium:

Java

 

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

Java

 

Для получения доменного имени:

Java

 

Для получения URL веб-страницы:

Java

 

Для получения высоты и ширины веб-страницы:

Java

 

Для перехода на другую страницу с помощью JavaScript:

Java

 

Для выполнения прокрутки в приложении с помощью Selenium:

  • Чтобы прокрутить страницу вертикально на 500 пикселей:
    Java

     

  • Для прокрутки страницы вертикально до конца:
    Java

     

Добавление элемента в модель объекта документа (DOM):

Java

 

Для получения теневого корня в DOM:

Java

 

Заключение

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

В этом блоге мы рассмотрели, как использовать JavaScriptExecutor в Selenium и его различные методы. Кроме того, мы рассмотрели различные сценарии для достижения эффективного решения с использованием различных методов, а также практические примеры.

Source:
https://dzone.com/articles/how-to-use-javascriptexecutor-in-selenium