JavaScriptExecutor v Selenium s příkladem

Co je to JavaScriptExecutor?

JavaScriptExecutor je rozhraní, které pomáhá spouštět JavaSkript skrz Selenium Webdriver. JavaScriptExecutor poskytuje dvě metody „executescript“ a „executeAsyncScript“ pro spuštění javascriptu ve vybraném okně nebo aktuální stránce.

JavaScriptExecutor

Proč potřebujeme JavaScriptExecutor?

In Selenium Webdriver, lokátory jako XPath, CSS atd. se používají k identifikaci a provádění operací na webové stránce.

V případě, že tyto lokátory nefungují, můžete je použít JavaScriptExecutor. Můžete použít JavaScriptExecutor k provedení požadované operace na webovém prvku.

Selenium podporuje javaScriptExecutor. Není potřeba žádný další plugin nebo doplněk. Stačí importovat (org.openqa.selenium.JavascriptVykonavatel) ve skriptu k použití JavaScriptExecutor.

JavaMetody ScriptExecutor v Selenium

spustit skript

Tato metoda se provádí JavaScénář v kontextu aktuálně vybraného rámu nebo okna v Selenium. Skript použitý v této metodě běží v těle anonymní funkce (funkce bez názvu). Můžeme tomu předat i složité argumenty.

Skript může vracet hodnoty. Vrácené datové typy jsou

  • Boolean
  • Dlouho
  • Řetězec
  • Seznam
  • WebElement.

JavascriptSyntaxe exekutora:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Scénář - To je JavaSkript, který je třeba spustit.
  • Argumenty – Jsou to argumenty skriptu. Je to volitelné.

vykonatAsyncScript

Díky asynchronnímu skriptu se vaše stránka vykresluje rychleji. Místo toho, aby uživatelé museli čekat na stažení skriptu, než se stránka vykreslí. Tato funkce provede asynchronní část JavaSkript v kontextu aktuálně vybraného rámce nebo okna v Selenium. Takto provedený JS je jednovláknový s různými funkcemi zpětného volání, které běží synchronně.

Jak používat JavaScriptExecutor v Selenium

Zde je postup krok za krokem, jak používat JavaScriptExecutor v Selenium:

Krok 1) Importujte balíček.

import org.openqa.selenium.JavascriptExecutor;

Krok 2) Vytvořte referenci.

JavascriptExecutor js = (JavascriptExecutor) driver;

Krok 3) Zavolejte JavascriptExekutorská metoda.

js.executeScript(script, args);

Příklad kliknutí na prvek pomocí JavaScripExecutor v Selenium

Pro executeScript uvidíme tři různé příklady jeden po druhém.

1) Příklad: Klepnutím na tlačítko se přihlaste a vygenerujte okno upozornění pomocí JavaScriptExecutor.

V tomto scénáři použijeme pro ilustraci demo stránku „Guru99“. JavaScriptExecutor. V tomto příkladu

Klepnutím na tlačítko se přihlaste a vygenerujte okno výstrahy pomocí JavaScriptExecutor

  • Zobrazit varovné okno po úspěšném přihlášení.
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');");   
    		
    }		
}

Výstup: Když je kód úspěšně proveden. Budete pozorovat

  • Úspěšně klikněte na tlačítko přihlášení a na
  • Zobrazí se okno s upozorněním (viz obrázek níže).

Klepnutím na tlačítko se přihlaste a vygenerujte okno výstrahy pomocí JavaScriptExecutor

2) Příklad: Zachycení dat seškrábnutí a navigace na různé stránky pomocí JavaScriptExecutor.

Spusťte níže uvedený selenový skript. V tomto příkladu

  • Spusťte web
  • Získejte podrobnosti o webu, jako je adresa URL webu, název názvu a název domény webu.
  • Poté přejděte na jinou stránku.
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/'");			
    }		
}

Výstup: Když je výše uvedený kód úspěšně spuštěn, načte podrobnosti o webu a přejde na jinou stránku, jak je uvedeno níže.

Zachyťte data oškrábání a přejděte na různé stránky pomocí 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
===============================================

Zachyťte data oškrábání a přejděte na různé stránky pomocí JavaScriptExecutor

3) Příklad: Přejděte dolů pomocí JavaScriptExecutor.

Spusťte níže uvedený selenový skript. V tomto příkladu

  • Spusťte web
  • Posuňte se dolů o 600 pixelů
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)");			
    }		
}

Výstup: Po provedení výše uvedeného kódu se posune o 600 pixelů dolů (viz obrázek níže).

Přejděte dolů pomocí JavaScriptExecutor

Příklad executeAsyncScript in Selenium

Použití skriptu executeAsyncScript pomáhá zlepšit výkon vašeho testu. Umožňuje psát test spíše jako normální kódování.

ExecSync blokuje další akce prováděné Selenium prohlížeč, ale execAsync neblokuje akci. Odešle zpětné volání na stranu serveru Testování po dokončení skriptu. To znamená, že vše uvnitř skriptu bude spuštěno prohlížečem a ne serverem.

Příklad 1: Provedení spánku v testovaném prohlížeči.

V tomto scénáři použijeme demo stránku „Guru99“ pro ilustraci executeAsyncScript. V tomto příkladu budete

Krok 1) Zachyťte čas zahájení před čekáním 5 sekund (5000 milisekund) pomocí metody executeAsyncScript().

Krok 2) Poté pomocí funkce executeAsyncScript() počkejte 5 sekund.

Krok 3) Poté zjistěte aktuální čas.

Krok 4) Odečíst (aktuální čas – čas začátku) = uplynulý čas.

Krok 5) Ověřte, že výstup by měl zobrazovat více než 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));					
                    		
    }		
}			

Výstup: Úspěšně zobrazený uplynulý čas více než 5 sekund (5000 milisekund), jak je uvedeno níže:

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

Shrnutí

JavaScriptExecutor se používá, když Selenium Webdriveru se nepodařilo kliknout na žádný prvek kvůli nějakému problému.

  • JavaScriptExecutor poskytuje dvě metody „executescript“ a „executeAsyncScript“.
  • Provedl JavaPoužití skriptu Selenium Webdriver.
  • Ilustrováno, jak proklikat prvek skrz JavaScriptExecutor, pokud selen neklikne na prvek kvůli nějakému problému.
  • Vygenerováno okno „Výstraha“ pomocí JavaScriptExecutor.
  • Přechod na jinou stránku pomocí JavaScriptExecutor.
  • Posun dolů v okně pomocí JavaScriptExecutor.
  • Pomocí načtené adresy URL, názvu a názvu domény JavaScriptExecutor.