JavaScriptExecutor в Selenium з прикладом

Що таке JavaScriptExecutor?

JavaScriptExecutor — це інтерфейс, який допомагає виконувати JavaСценарій через Selenium Веб-драйвер. JavaScriptExecutor надає два методи «executescript» і «executeAsyncScript» для запуску javascript у вибраному вікні або на поточній сторінці.

JavaScriptExecutor

Навіщо нам 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/ та
  • увійти за допомогою облікових даних

Натисніть кнопку, щоб увійти та створити вікно сповіщень за допомогою JavaScriptExecutor

  • Відображення вікна сповіщення про успішний вхід.
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');");   
    		
    }		
}

вихід: Коли код виконано успішно. Ви будете спостерігати

  • Успішне натискання кнопки входу та
  • Відобразиться вікно сповіщення (див. зображення нижче).

Натисніть кнопку, щоб увійти та створити вікно сповіщень за допомогою JavaScriptExecutor

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/'");			
    }		
}

вихід: Коли вищевказаний код буде виконано успішно, він отримає деталі сайту та перейде на іншу сторінку, як показано нижче.

Зберігайте скрейп-дані та переходьте до різних сторінок за допомогою JavaScriptExecutor

[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
===============================================

Зберігайте скрейп-дані та переходьте до різних сторінок за допомогою JavaScriptExecutor

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 пікселів (див. зображення нижче).

Прокрутіть вниз за допомогою JavaScriptExecutor

Приклад 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.

Детальніше ЧИТАТИ