Учебники

49) Выполнить код на основе JavaScript

Что такое JavaScriptExecutor?

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

Выполнить код на основе JavaScript с помощью Selenium Webdriver

В этом уроке вы узнаете —

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

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

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

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

Методы JavaScriptExecutor

  1. executeAsyncScript

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

  1. executeScript

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

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

  • логический
  • Длинный
  • строка
  • Список
  • WebElement.

Основной синтаксис для JavascriptExecutor приведен ниже:

Синтаксис:

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

Пример executeAsyncScript

Использование executeAsyncScript помогает повысить производительность вашего теста. Это позволяет писать тест больше как обычное кодирование.

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

Пример 1. Выполнение сна в тестируемом браузере.

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

Шаг 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("http://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		
===============================================

Пример executeScript

Для executeScript мы увидим три разных примера один за другим.

1) Пример: нажмите кнопку для входа в систему и создания окна оповещений с помощью JavaScriptExecutor.

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

Выполнить код на основе JavaScript с помощью Selenium Webdriver

  • Отображать окно предупреждения при успешном входе в систему.
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("http://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');");   
    		
    }		
}

Вывод: когда код выполняется успешно. Вы будете наблюдать

  • Успешное нажатие на кнопку входа и
  • Откроется окно оповещения (см. Изображение ниже).

Выполнить код на основе JavaScript с помощью Selenium Webdriver

2) Пример: захват данных Scrape и переход на разные страницы с использованием JavaScriptExecutor.

Выполните следующий сценарий селена. В этом примере

  • Запустить сайт
  • Получить информацию о сайте, как 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("http://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 = 'http://demo.guru99.com/'");			
    }		
}

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

Выполнить код на основе JavaScript с помощью Selenium Webdriver

[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 = http://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0
===============================================		

Выполнить код на основе JavaScript с помощью Selenium Webdriver

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 пикселей (см. Изображение ниже).

Выполнить код на основе JavaScript с помощью Selenium Webdriver

Резюме:

JavaScriptExecutor используется, когда Selenium Webdriver не может нажать на какой-либо элемент из-за какой-либо проблемы.

  • JavaScriptExecutor предоставляет два метода «executetescript» и «executeAsyncScript» для обработки.
  • Выполнен JavaScript с использованием Selenium Webdriver.
  • Проиллюстрировано, как щелкнуть элемент через JavaScriptExecutor, если селен не может щелкнуть элемент из-за какой-либо проблемы.
  • Сгенерировал окно «Предупреждение» с помощью JavaScriptExecutor.
  • Перешел на другую страницу с помощью JavaScriptExecutor.
  • Прокрутка вниз по окну с помощью JavaScriptExecutor.
  • Получил URL, заголовок и имя домена с помощью JavaScriptExecutor.