Что такое JavaScriptExecutor?
JavaScriptExecutor - это интерфейс, который помогает выполнять JavaScript через Selenium Webdriver. JavaScriptExecutor предоставляет два метода «executescript» и «executeAsyncScript» для запуска javascript в выбранном окне или на текущей странице.
В этом руководстве вы узнаете -
- Что такое JavaScriptExecutor?
- Зачем нам нужен JavaScriptExecutor?
- Методы JavaScriptExecutor
- Пример executeAsyncScript
- Пример 1. Выполнение спящего режима в тестируемом браузере.
- Пример executeScript
- 1) Пример: нажмите кнопку, чтобы войти в систему и сгенерировать окно предупреждения.
- 2) Пример: сбор данных парсинга и переход на разные страницы
- 3) Пример: прокрутка вниз с помощью
Зачем нам нужен JavaScriptExecutor?
В Selenium Webdriver локаторы, такие как XPath, CSS и т. Д., Используются для идентификации и выполнения операций на веб-странице.
В случае, если эти локаторы не работают, вы можете использовать JavaScriptExecutor. Вы можете использовать JavaScriptExecutor для выполнения желаемой операции с веб-элементом.
Selenium поддерживает javaScriptExecutor. Нет необходимости в дополнительном плагине или надстройке. Вам просто нужно импортировать ( org.openqa.selenium.JavascriptExecutor ) в скрипт, чтобы использовать JavaScriptExecutor.
Методы JavaScriptExecutor
- executeAsyncScript
С асинхронным скриптом ваша страница отображается быстрее. Вместо того, чтобы заставлять пользователей ждать загрузки скрипта перед отрисовкой страницы. Эта функция выполнит асинхронный фрагмент JavaScript в контексте текущего выбранного фрейма или окна в Selenium. Выполняемый таким образом JS является однопоточным с различными функциями обратного вызова, которые выполняются синхронно.
- executeScript
Этот метод выполняет JavaScript в контексте текущего выбранного фрейма или окна в Selenium. Сценарий, используемый в этом методе, выполняется в теле анонимной функции (функции без имени). Мы также можем передать ему сложные аргументы.
Скрипт может возвращать значения. Возвращаемые типы данных:
- Логический
- Длинный
- Нить
- Список
- WebElement.
Базовый синтаксис JavascriptExecutor приведен ниже:
Синтаксис:
JavascriptExecutor js = (JavascriptExecutor) драйвер;js.executeScript (сценарий, аргументы);
- Сценарий - это JavaScript, который необходимо выполнить.
- Аргументы - это аргументы сценария. Это необязательно.
Пример executeAsyncScript
Использование executeAsyncScript помогает повысить производительность вашего теста. Это позволяет писать тест, больше похожий на обычное кодирование.
ExecSync блокирует дальнейшие действия, выполняемые браузером Selenium, но execAsync не блокирует действие. Он отправит обратный вызов в набор для тестирования на стороне сервера после завершения сценария. Это означает, что все внутри скрипта будет выполняться браузером, а не сервером.
Пример 1. Выполнение спящего режима в тестируемом браузере.
В этом сценарии мы будем использовать демонстрационный сайт «Guru99», чтобы проиллюстрировать executeAsyncScript. В этом примере вы будете
- Запустите браузер.
- Откройте сайт «http://demo.guru99.com/V4/».
- Приложение ожидает 5 секунд, чтобы выполнить дальнейшее действие.
Шаг 1) Захватите время начала перед ожиданием в течение 5 секунд (5000 миллисекунд) с помощью метода executeAsyncScript ().
Шаг 2) Затем используйте executeAsyncScript () и подождите 5 секунд.
Шаг 3) Затем получите текущее время.
Шаг 4) Вычтите (текущее время - время начала) = прошедшее время.
Шаг 5) Убедитесь, что вывод должен отображать более 5000 миллисекунд.
import java.util.concurrent.TimeUnit;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;открытый класс JavaSE_Test {@Тестpublic void Login (){Драйвер WebDriver = новый FirefoxDriver ();// Создание интерфейсного объекта JavascriptExecutor путем приведения типаJavascriptExecutor js = (JavascriptExecutor) драйвер;// Запуск сайта.driver.get ("http://demo.guru99.com/V4/");// Развернуть окноdriver.manage (). window (). maximize ();// Устанавливаем время ожидания сценария на 20 секундdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Объявить и установить время началаlong start_time = System.currentTimeMillis ();// Вызов метода executeAsyncScript () для ожидания 5 секундjs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Получаем разницу (currentTime - startTime) времен.System.out.println ("Прошедшее время: + (System.currentTimeMillis () - start_time));}}
Вывод: успешно отображено прошедшее время более 5 секунд (5000 миллисекунд), как показано ниже:
[TestNG] Выполняется:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN Для регистратора (org.apache.http.client.protocol.RequestAddCookies) не найдены дополнения.log4j: ПРЕДУПРЕЖДЕНИЕ. Правильно инициализируйте систему log4j.log4j: WARN См. http://logging.apache.org/log4j/1.2/faq.html#noconfig для получения дополнительной информации.Прошло времени: 5022ВЫПОЛНЕНО: Войти===============================================Тест по умолчаниюВыполненных тестов: 1, сбоев: 0, пропусков: 0===============================================
Пример executeScript
Для executeScript мы один за другим увидим три разных примера.
1) Пример: нажмите кнопку, чтобы войти в систему и сгенерировать окно предупреждения с помощью JavaScriptExecutor.
В этом сценарии мы будем использовать демонстрационный сайт «Guru99», чтобы проиллюстрировать JavaScriptExecutor. В этом примере
- Запустите веб-браузер
- откройте сайт "http://demo.guru99.com/V4/" и
- войти с учетными данными
- Отображать окно предупреждения при успешном входе в систему.
import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;открытый класс JavaSE_Test {@Тестpublic void Login (){Драйвер WebDriver = новый FirefoxDriver ();// Создание интерфейсного объекта JavascriptExecutor путем приведения типаJavascriptExecutor js = (JavascriptExecutor) драйвер;// Запуск сайта.driver.get ("http://demo.guru99.com/V4/");Кнопка WebElement = driver.findElement (By.name ("btnLogin"));// Войдите в Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("пароль")). sendKeys ("amUpenu");// Выполнить Нажмите кнопку LOGIN с помощью JavascriptExecutorjs.executeScript ("arguments [0] .click ();", кнопка);// Для создания окна оповещения с помощью JavascriptExecutor. Показать предупреждающее сообщениеjs.executeScript ("alert ('Добро пожаловать в Guru99');");}}
Вывод: когда код выполнен успешно. Вы будете наблюдать
- Успешное нажатие на кнопку входа и
- Откроется окно с предупреждением (см. Изображение ниже).
2) Пример: захват данных парсинга и переход на разные страницы с помощью JavaScriptExecutor.
Выполните приведенный ниже сценарий селена. В этом примере
- Запустить сайт
- Получите подробную информацию о сайте, такую как URL-адрес сайта, название заголовка и доменное имя сайта.
- Затем перейдите на другую страницу.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;открытый класс JavaSE_Test {@Тестpublic void Login (){Драйвер WebDriver = новый FirefoxDriver ();// Создание интерфейсного объекта JavascriptExecutor путем приведения типаJavascriptExecutor js = (JavascriptExecutor) драйвер;// Запуск сайта.driver.get ("http://demo.guru99.com/V4/");// Получение доменного имени сайта. Tostring () меняет объект на имя.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Доменное имя сайта =" + DomainName);// Получение URL-адреса сайта. Tostring () изменить объект на имяString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL сайта =" + url);// Метод document.title получает название заголовка сайта. Tostring () изменить объект на имяСтрока TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Название страницы =" + Название страницы);// Переходим на новую страницу, т.е. для создания страницы доступа. (запустить новый URL)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Вывод: когда приведенный выше код выполнен успешно, он получит подробную информацию о сайте и перейдет на другую страницу, как показано ниже.
[TestNG] Выполняется:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN Для регистратора (org.apache.http.client.protocol.RequestAddCookies) не найдены дополнения.log4j: ПРЕДУПРЕЖДЕНИЕ. Правильно инициализируйте систему log4j.log4j: WARN См. http://logging.apache.org/log4j/1.2/faq.html#noconfig для получения дополнительной информации.Доменное имя сайта = demo.guru99.comURL сайта = http://demo.guru99.com/V4/Заголовок страницы = Домашняя страница банка Guru99ВЫПОЛНЕНО: Войти===============================================Тест по умолчаниюВыполненных тестов: 1, сбоев: 0, пропусков: 0===============================================
3) Пример: прокрутите вниз с помощью JavaScriptExecutor.
Выполните приведенный ниже сценарий селена. В этом примере
- Запустить сайт
- Прокрутите вниз на 600 пикселей
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;открытый класс JavaSE_Test {@Тестpublic void Login (){Драйвер WebDriver = новый FirefoxDriver ();// Создание интерфейсного объекта JavascriptExecutor путем приведения типаJavascriptExecutor js = (JavascriptExecutor) драйвер;// Запуск сайта.driver.get ("http://moneyboats.com/");// Развернуть окноdriver.manage (). window (). maximize ();// Вертикальная прокрутка вниз на 600 пикселейjs.executeScript ("window.scrollBy (0,600)");}}
Вывод : когда приведенный выше код выполняется, он прокручивается вниз на 600 пикселей (см. Изображение ниже).
Резюме:
JavaScriptExecutor используется, когда Selenium Webdriver не может щелкнуть какой-либо элемент из-за какой-либо проблемы.
- JavaScriptExecutor предоставляет для обработки два метода «executescript» и «executeAsyncScript».
- Выполнил JavaScript с помощью Selenium Webdriver.
- Показано, как щелкнуть элемент через JavaScriptExecutor, если селен не может щелкнуть элемент из-за какой-либо проблемы.
- Сгенерировано окно «Предупреждение» с помощью JavaScriptExecutor.
- Перешел на другую страницу с помощью JavaScriptExecutor.
- Прокрутка окна вниз с помощью JavaScriptExecutor.
- Получены URL, заголовок и имя домена с помощью JavaScriptExecutor.