JavaScriptExecutor в Selenium з прикладом
Що таке JavaScriptExecutor?
JavaScriptExecutor — це інтерфейс, який допомагає виконувати JavaСценарій через Selenium Веб-драйвер. JavaScriptExecutor надає два методи «executescript» і «executeAsyncScript» для запуску javascript у вибраному вікні або на поточній сторінці.
Навіщо нам JavaScriptExecutor?
In Selenium Webdriver, локатори, такі як XPath, CSS тощо, використовуються для ідентифікації та виконання операцій на веб-сторінці.
Якщо ці локатори не працюють, ви можете скористатися ними JavaScriptExecutor. Ви можете використовувати JavaScriptExecutor для виконання потрібної операції над веб-елементом.
Selenium підтримує javaScriptExecutor. Немає потреби в додатковому плагіні чи надбудові. Вам просто потрібно імпортувати (org.openqa.selenium.Javascriptвиконавець) у сценарії для використання JavaScriptExecutor.
JavaМетоди ScriptExecutor в Selenium
executeScript
Цей метод виконується JavaScript у контексті поточного вибраного кадру або вікна Selenium. Сценарій, який використовується в цьому методі, виконується в тілі анонімної функції (функції без імені). Ми також можемо передати йому складні аргументи.
Сценарій може повертати значення. Повернені типи даних:
- Boolean
- Довго
- рядок
- список
- WebElement.
JavascriptСинтаксис виконавця:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Це JavaСценарій, який потрібно виконати.
- Аргументи – Це аргументи до сценарію. Це необов'язково.
executeAsyncScript
За допомогою асинхронного сценарію ваша сторінка відображається швидше. Замість того, щоб змушувати користувачів чекати завантаження сценарію перед відтворенням сторінки. Ця функція виконає асинхронну частину JavaСценарій у контексті поточного вибраного кадру або вікна Selenium. Виконуваний таким чином JS є однопоточним із різними функціями зворотного виклику, які виконуються синхронно.
як використовувати JavaScriptExecutor в Selenium
Ось крок за кроком процес використання JavaScriptExecutor в Selenium:
Крок 1) Імпортуйте пакет.
import org.openqa.selenium.JavascriptExecutor;
Крок 2) Створіть посилання.
JavascriptExecutor js = (JavascriptExecutor) driver;
Крок 3) Телефонуйте JavascriptМетод виконавця.
js.executeScript(script, args);
Приклад використання клацання елемента JavaScripExecutor в Selenium
Для executeScript ми побачимо три різні приклади один за іншим.
1) Приклад: натисніть кнопку, щоб увійти та створити вікно сповіщень за допомогою JavaScriptExecutor.
У цьому сценарії ми використаємо демо-сайт «Guru99» для ілюстрації JavaScriptExecutor. У цьому прикладі
- Запустіть веб-браузер
- відкрити сайт https://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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); WebElement button =driver.findElement(By.name("btnLogin")); //Login to Guru99 driver.findElement(By.name("uid")).sendKeys("mngr34926"); driver.findElement(By.name("password")).sendKeys("amUpenu"); //Perform Click on LOGIN button using JavascriptExecutor js.executeScript("arguments[0].click();", button); //To generate Alert window using JavascriptExecutor. Display the alert message js.executeScript("alert('Welcome to Guru99');"); } }
вихід: Коли код виконано успішно. Ви будете спостерігати
- Успішне натискання кнопки входу та
- Відобразиться вікно сповіщення (див. зображення нижче).
2) Приклад: Збирайте дані сканування та переходьте до різних сторінок за допомогою JavaScriptExecutor.
Виконайте наведений нижче сценарій selenium. У цьому прикладі
- Запустіть сайт
- Отримайте деталі сайту, як-от URL-адресу сайту, назву та доменне ім’я сайту.
- Потім перейдіть на іншу сторінку.
import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); //Fetching the Domain Name of the site. Tostring() change object to name. String DomainName = js.executeScript("return document.domain;").toString(); System.out.println("Domain name of the site = "+DomainName); //Fetching the URL of the site. Tostring() change object to name String url = js.executeScript("return document.URL;").toString(); System.out.println("URL of the site = "+url); //Method document.title fetch the Title name of the site. Tostring() change object to name String TitleName = js.executeScript("return document.title;").toString(); System.out.println("Title of the page = "+TitleName); //Navigate to new Page i.e to generate access page. (launch new url) js.executeScript("window.location = 'https://demo.guru99.com/'"); } }
вихід: Коли вищевказаний код буде виконано успішно, він отримає деталі сайту та перейде на іншу сторінку, як показано нижче.
[TestNG] Running: C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Domain name of the site = demo.guru99.com URL of the site = https://demo.guru99.com/V4/ Title of the page = Guru99 Bank Home Page PASSED: Login =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 ===============================================
3) Приклад: Прокрутіть вниз за допомогою JavaScriptExecutor.
Виконайте наведений нижче сценарій selenium. У цьому прикладі
- Запустіть сайт
- Прокрутити вниз на 600 пікселів
import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("http://moneyboats.com/"); //Maximize window driver.manage().window().maximize(); //Vertical scroll down by 600 pixels js.executeScript("window.scrollBy(0,600)"); } }
Вихід: Коли код вище виконується, він буде прокручуватися вниз на 600 пікселів (див. зображення нижче).
Приклад executeAsyncScript в Selenium
Використання executeAsyncScript допомагає покращити продуктивність вашого тесту. Це дозволяє писати тест, більш схожий на звичайне кодування.
ВиконавчийSync блокує подальші дії, які виконує Selenium браузер, але execAsync не блокує дію. Він надішле зворотний виклик на сторону сервера Тестування після завершення сценарію. Це означає, що все всередині сценарію буде виконуватися браузером, а не сервером.
Приклад 1: Виконання режиму сну в тестованому браузері.
У цьому сценарії ми використаємо демонстраційний сайт «Guru99», щоб проілюструвати executeAsyncScript. У цьому прикладі ви це зробите
- Запустіть браузер.
- Відкрити сайт https://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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); //Maximize window driver.manage().window().maximize(); //Set the Script Timeout to 20 seconds driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS); //Declare and set the start time long start_time = System.currentTimeMillis(); //Call executeAsyncScript() method to wait for 5 seconds js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);"); //Get the difference (currentTime - startTime) of times. System.out.println("Passed time: " + (System.currentTimeMillis() - start_time)); } }
вихід: Успішно відображено минулий час понад 5 секунд (5000 мілісекунд), як показано нижче:
[TestNG] Running: C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Passed time: 5022 PASSED: Login =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 ===============================================
Підсумки
JavaScriptExecutor використовується, коли Selenium Webdriver не може клацнути будь-який елемент через певну проблему.
- JavaScriptExecutor надає два методи «executescript» і «executeAsyncScript» для обробки.
- Виконав JavaВикористання сценарію Selenium Веб-драйвер.
- Проілюстровано, як натиснути на елемент JavaScriptExecutor, якщо selenium не може натиснути елемент через певну проблему.
- Згенеровано вікно «Попередження» за допомогою JavaScriptExecutor.
- Перейшов на іншу сторінку за допомогою JavaScriptExecutor.
- Прокрутив вікно вниз за допомогою JavaScriptExecutor.
- Отримано URL-адресу, назву та доменне ім’я за допомогою JavaScriptExecutor.