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

Този метод се изпълнява JavaСценарий в контекста на текущо избраната рамка или прозорец в Selenium. Скриптът, използван в този метод, се изпълнява в тялото на анонимна функция (функция без име). Можем също да му предадем сложни аргументи.

Скриптът може да връща стойности. Върнатите типове данни са

  • Булева
  • Дълга
  • Низ
  • списък
  • WebElement.

JavascriptСинтаксис на изпълнителя:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Сценарий - Това е JavaСкрипт, който трябва да се изпълни.
  • Аргументи – Това са аргументите към сценария. Не е задължително.

изпълни AsyncScript

С асинхронен скрипт вашата страница се изобразява по-бързо. Вместо да принуждавате потребителите да чакат изтеглянето на скрипта, преди страницата да се изобрази. Тази функция ще изпълни асинхронна част от 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.

Изпълнете селен скрипта по-долу. В този пример,

  • Стартирайте сайта
  • Извлечете подробности за сайта като 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.

Изпълнете селен скрипта по-долу. В този пример,

  • Стартирайте сайта
  • Превъртете надолу с 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		
===============================================

Oбобщение

JavaScriptExecutor се използва, когато Selenium Webdriver не успява да щракне върху който и да е елемент поради някакъв проблем.

  • JavaScriptExecutor предоставя два метода „executescript“ и „executeAsyncScript“ за обработка.
  • Изпълних JavaИзползване на скрипт Selenium Уебдрайвер.
  • Илюстрирано как да щракнете върху елемент през JavaScriptExecutor, ако selenium не успее да щракне върху елемент поради някакъв проблем.
  • Генерира прозореца „Предупреждение“ с помощта на JavaScriptExecutor.
  • Отворихте друга страница с помощта на JavaScriptExecutor.
  • Превъртете прозореца надолу с помощта на JavaScriptExecutor.
  • Извлечен URL адрес, заглавие и име на домейн с помощта JavaScriptExecutor.