JavaScriptExecutor w Selenium z Przykładem

Czym jest JavaScriptExecutor?

JavaScriptExecutor to interfejs, który pomaga w wykonywaniu JavaSkrypt przez Selenium Sterownik internetowy. JavaScriptExecutor udostępnia dwie metody: „executescript” i „executeAsyncScript” umożliwiające uruchomienie kodu JavaScript w wybranym oknie lub bieżącej stronie.

JavaWykonawca skryptu

Dlaczego potrzebujemy JavaScriptExecutor?

In Selenium Webdriver i lokalizatory takie jak XPath, CSS itp. służą do identyfikowania i wykonywania operacji na stronie internetowej.

W przypadku, gdy te lokalizatory nie działają, możesz skorzystać JavaScriptExecutor. Możesz użyć JavaScriptExecutor wykonuje żądaną operację na elemencie internetowym.

Selenium obsługuje javaScriptExecutor. Nie ma potrzeby stosowania dodatkowej wtyczki ani dodatku. Wystarczy zaimportować (org.openqa.selenium.JavascriptWykonawca) w skrypcie, jak używać JavaScriptExecutor.

JavaMetody ScriptExecutor w Selenium

wykonajSkrypt

Ta metoda jest wykonywana JAVASCRIPT w kontekście aktualnie wybranej ramki lub okna Selenium. Skrypt używany w tej metodzie działa w treści funkcji anonimowej (funkcji bez nazwy). Możemy mu także przekazywać skomplikowane argumenty.

Skrypt może zwracać wartości. Zwracane typy danych to

  • Boolean
  • długo
  • sznur
  • Lista
  • Element sieciowy.

JavascriptSkładnia executora:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Scenariusz - To jest JavaSkrypt, który należy wykonać.
  • Argumenty – To argumenty do scenariusza. To opcjonalne.

wykonajAsyncScript

Dzięki asynchronicznemu skryptowi Twoja strona renderuje się szybciej. Zamiast zmuszać użytkowników do czekania na pobranie skryptu przed renderowaniem strony. Ta funkcja wykona asynchroniczny fragment JavaSkrypt w kontekście aktualnie wybranej ramki lub okna w SeleniumWykonany w ten sposób kod JS jest jednowątkowy i zawiera różnorodne funkcje wywołania zwrotnego, które działają synchronicznie.

Jak używać JavaScriptExecutor w Selenium

Oto procedura krok po kroku dotycząca użycia JavaScriptExecutor w Selenium:

Krok 1) Zaimportuj pakiet.

import org.openqa.selenium.JavascriptExecutor;

Krok 2) Utwórz odniesienie.

JavascriptExecutor js = (JavascriptExecutor) driver;

Krok 3) Zadzwoń do JavascriptMetoda wykonawcy.

js.executeScript(script, args);

Przykład kliknięcia elementu za pomocą JavaExecutor skryptów w Selenium

W przypadku skryptu wykonawczego zobaczymy jeden po drugim trzy różne przykłady.

1) Przykład: Kliknij przycisk, aby się zalogować i wygenerować okno alertów JavaScriptExecutor.

W tym scenariuszu do ilustracji użyjemy witryny demonstracyjnej „Guru99”. JavaScriptExecutor. W tym przykładzie,

Kliknij przycisk, aby się zalogować i wygenerować okno alertów JavaWykonawca skryptu

  • Wyświetl okno alertu po udanym logowaniu.
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');");   
    		
    }		
}

Wyjście: Gdy kod zostanie pomyślnie wykonany. Będziesz obserwować

  • Pomyślne kliknięcie przycisku logowania i
  • Wyświetli się okno alertu (patrz obrazek poniżej).

Kliknij przycisk, aby się zalogować i wygenerować okno alertów JavaWykonawca skryptu

2) Przykład: przechwytywanie danych i nawigowanie do różnych stron za pomocą JavaScriptExecutor.

Wykonaj poniższy skrypt selenu. W tym przykładzie,

  • Uruchom witrynę
  • Pobierz szczegóły witryny, takie jak adres URL, tytuł i nazwę domeny witryny.
  • Następnie przejdź na inną stronę.
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/'");			
    }		
}

Wyjście: Gdy powyższy kod zostanie wykonany poprawnie, zostaną pobrane szczegóły witryny i nastąpi przejście do innej strony, jak pokazano poniżej.

Przechwytuj dane Scrape i przejdź do różnych stron za pomocą JavaWykonawca skryptu

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

Przechwytuj dane Scrape i przejdź do różnych stron za pomocą JavaWykonawca skryptu

3) Przykład: przewiń w dół za pomocą JavaScriptExecutor.

Wykonaj poniższy skrypt selenu. W tym przykładzie,

  • Uruchom witrynę
  • Przewiń w dół o 600 pikseli
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)");			
    }		
}

Wydajność: Kiedy powyższy kod zostanie wykonany, zostanie on przewinięty w dół o 600 pikseli (patrz obrazek poniżej).

Przewiń w dół za pomocą JavaWykonawca skryptu

Przykład executeAsyncScript w Selenium

Użycie executeAsyncScript pomaga poprawić wydajność testu. Pozwala pisać testy bardziej jak normalne kodowanie.

WykonawcaSync blokuje dalsze działania wykonywane przez Selenium przeglądarka, ale execAsync nie blokuje akcji. Wyśle wywołanie zwrotne do strony serwera Testowanie suite po ukończeniu skryptu. Oznacza to, że wszystko wewnątrz skryptu zostanie wykonane przez przeglądarkę, a nie serwer.

Przykład 1: Uśpienie testowanej przeglądarki.

W tym scenariuszu użyjemy witryny demonstracyjnej „Guru99”, aby zilustrować executeAsyncScript. W tym przykładzie będziesz

Krok 1) Zarejestruj czas rozpoczęcia przed odczekaniem 5 sekund (5000 milisekund) za pomocą metody executeAsyncScript().

Krok 2) Następnie należy odczekać 5 sekund za pomocą executeAsyncScript().

Krok 3) Następnie uzyskaj aktualny czas.

Krok 4) Odejmij (czas bieżący – czas rozpoczęcia) = czas, który upłynął.

Krok 5) Sprawdź, czy dane wyjściowe powinny wyświetlać więcej niż 5000 milisekund

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));					
                    		
    }		
}			

Wyjście: Pomyślnie wyświetlono upływający czas dłuższy niż 5 sekund (5000 milisekund), jak pokazano poniżej:

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

Podsumowanie

JavaScriptExecutor jest używany, gdy Selenium Z powodu jakiegoś problemu Webdriver nie klika żadnego elementu.

  • JavaScriptExecutor udostępnia dwie metody obsługi: „executescript” i „executeAsyncScript”.
  • Wykonano JavaUżywanie skryptu Selenium Sterownik internetowy.
  • Zilustrowano, jak kliknąć element JavaScriptExecutor, jeśli selen nie może kliknąć na element z powodu jakiegoś problemu.
  • Wygenerowano okno „Alert” za pomocą JavaScriptExecutor.
  • Przeszedłem do innej strony za pomocą JavaScriptExecutor.
  • Przewinąłem okno w dół za pomocą JavaScriptExecutor.
  • Pobrany adres URL, tytuł i nazwa domeny przy użyciu JavaScriptExecutor.