Що таке 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 для виконання бажаної операції над веб-елементом.
Селен підтримує 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 мілісекунд
імпортувати java.util.concurrent.TimeUnit;імпорт org.openqa.selenium.JavascriptExecutor;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт 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 (аргументи [аргументи. довжина - 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: ПОПЕРЕДЖЕННЯ Для реєстратора не знайдено додатків (org.apache.http.client.protocol.RequestAddCookies).log4j: ПОПЕРЕДЖЕННЯ Будь ласка, ініціалізуйте систему log4j належним чином.log4j: ПОПЕРЕДЖЕННЯ Див. 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/" і
- вхід з обліковими даними
- Відображення вікна попередження про успішний вхід.
імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.JavascriptExecutor;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт 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");// Виконати клацніть на кнопці ВХОД за допомогою JavascriptExecutorjs.executeScript ("аргументи [0] .click ();", кнопка);// Згенерувати вікно сповіщення за допомогою JavascriptExecutor. Відображення попереджувального повідомленняjs.executeScript ("alert ('Ласкаво просимо до Guru99');");}}
Результат: Коли код успішно виконується. Ви будете спостерігати
- Успішне натискання кнопки входу та
- Відобразиться вікно попередження (див. Зображення нижче).
2) Приклад: Захоплення даних зіскапування та перехід до різних сторінок за допомогою JavaScriptExecutor.
Виконайте наведений нижче сценарій селену. У цьому прикладі
- Запустіть сайт
- Отримайте деталі сайту, як-от URL-адресу сайту, назву заголовка та доменне ім’я сайту.
- Потім перейдіть на іншу сторінку.
імпорт org.openqa.selenium.JavascriptExecutor;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт org.testng.annotations.Test;відкритий клас JavaSE_Test {@ Тестpublic void Login (){Драйвер WebDriver = новий FirefoxDriver ();// Створення об'єкта інтерфейсу JavascriptExecutor за допомогою лиття типуJavascriptExecutor js = (JavascriptExecutor) драйвер;// Запуск сайту.driver.get ("http://demo.guru99.com/V4/");// Отримання доменного імені сайту. Tostring () змінює об'єкт на ім'я.Рядок DomainName = js.executeScript ("повернути document.domain;"). ToString ();System.out.println ("Доменне ім'я сайту =" + Ім'я домену);// Отримання URL-адреси сайту. Tostring () змінює об'єкт на ім'яРядок url = js.executeScript ("повернути документ.URL;"). ToString ();System.out.println ("URL-адреса сайту =" + url);// Метод document.title отримує назву заголовка сайту. Tostring () змінює об'єкт на ім'яРядок TitleName = js.executeScript ("повернути 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: ПОПЕРЕДЖЕННЯ Для реєстратора не знайдено додатків (org.apache.http.client.protocol.RequestAddCookies).log4j: ПОПЕРЕДЖЕННЯ Будь ласка, ініціалізуйте систему log4j належним чином.log4j: ПОПЕРЕДЖЕННЯ Див. 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 пікселів
імпорт org.openqa.selenium.JavascriptExecutor;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт 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.