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.
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,
- Uruchom przeglądarkę internetową
- otwórz witrynę https://demo.guru99.com/V4/ oraz
- zaloguj się z danymi uwierzytelniającymi
- 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).
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.
[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 ===============================================
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).
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
- Uruchom przeglądarkę.
- Otwórz stronę https://demo.guru99.com/V4/.
- Aplikacja czeka 5 sekund na wykonanie dalszej akcji.
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.