JavaScriptExecutor в Selenium с примером

Что такое JavaScriptExecutor?

JavaScriptExecutor — это интерфейс, который помогает выполнять JavaScript через Selenium Webdriver. JavaScriptExecutor предоставляет два метода «executescript» и «executeA».syncScript» для запуска JavaScript в выбранном окне или текущей странице.

JavaScriptExecutor

Зачем нам нужен JavaScriptExecutor?

В Selenium Webdriver локаторы, такие как XPath, CSS и т. д., используются для идентификации и выполнения операций на веб-странице.

Если эти локаторы не работают, вы можете использовать JavaScriptExecutor. Вы можете использовать JavaScriptExecutor для выполнения желаемой операции над веб-элементом.

Selenium поддерживает javaScriptExecutor. Нет необходимости в дополнительных плагинах или дополнениях. Вам просто нужно импортировать (org.openqa.selenium.JavascriptExecutor) в скрипте, чтобы использовать JavaScriptExecutor.

Методы JavaScriptExecutor в Selenium

выполнить скрипт

Этот метод выполняет JavaScript в контексте текущего выбранного фрейма или окна в Selenium. Сценарий, используемый в этом методе, выполняется в теле анонимной функции (функции без имени). Мы также можем передавать ему сложные аргументы.

Скрипт может возвращать значения. Возвращаемые типы данных:

  • Логический
  • Длинное
  • строка
  • Список
  • ВебЭлемент.

Синтаксис JavascriptExecutor:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Сценарий – Это JavaScript, который необходимо выполнить.
  • аргументы – Это аргументы к сценарию. Это необязательно.

выполнитьAsyncСценарий

Сsynchronous, ваша страница будет отображаться быстрее. Вместо того, чтобы заставлять пользователей ждать загрузки сценария перед отображением страницы. Эта функция выполнитsyncхронический фрагмент JavaScript в контексте текущего выбранного фрейма или окна в Selenium. Выполняемый таким образом JS является однопоточным с различной функцией обратного вызова, которая запускается syncхронически.

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

Вот пошаговый процесс использования JavaScriptExecutor в Selenium:

Шаг 1) Импортируйте пакет.

import org.openqa.selenium.JavascriptExecutor;

Шаг 2) Создайте ссылку.

JavascriptExecutor js = (JavascriptExecutor) driver;

Шаг 3) Вызовите метод JavascriptExecutor.

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.

Выполните приведенный ниже сценарий селена. В этом примере

  • Запустить сайт
  • Принеси деtails сайта, например 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/'");			
    }		
}

Вывод: Когда приведенный выше код будет выполнен успешно, он получит details сайта и перейдите на другую страницу, как показано ниже.

Собирайте данные очистки и переходите на разные страницы с помощью 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.

Выполните приведенный ниже сценарий селена. В этом примере

  • Запустить сайт
  • Прокрутите вниз на 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

Пример выполненияAsyncСкрипт на Selenium

Использование выполненияAsyncСкрипт, помогает улучшить производительность вашего теста. Это позволяет писать тесты, больше похожие на обычное программирование.

ExecSync блокирует дальнейшие действия, выполняемые браузером Selenium, но execAsync не блокирует действие. Он отправит обратный вызов на серверную сторону Тестирование suite после завершения сценария. Это означает, что все внутри скрипта будет выполняться браузером, а не сервером.

Пример 1: переход в режим сна в тестируемом браузере.

В этом сценарии мы будем использовать демонстрационный сайт «Guru99», чтобы проиллюстрировать выполнениеA.syncСкрипт. В этом примере вы будете

  • Запустите браузер.
  • Открытый сайт https://demo.guru99.com/V4/.
  • Приложение ждет 5 секунд, чтобы выполнить дальнейшее действие.

Шаг 1) Зафиксируйте время начала перед ожиданием в течение 5 секунд (5000 миллисекунд), используя выполнениеA.syncМетод сценария().

Шаг 2) Затем используйте выполнениеAsyncScript(), чтобы подождать 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» и «executeA».syncСкрипт» для обработки.
  • Выполнил JavaScript с помощью Selenium Webdriver.
  • Проиллюстрировано, как щелкнуть элемент через JavaScriptExecutor, если селену не удается щелкнуть элемент из-за какой-либо проблемы.
  • Сгенерировано окно «Оповещение» с помощью JavaScriptExecutor.
  • Перешел на другую страницу с помощью JavaScriptExecutor.
  • Прокрутил окно вниз с помощью JavaScriptExecutor.
  • Получен URL-адрес, заголовок и имя домена с помощью JavaScriptExecutor.