JavaScriptExecutor w Selenium WebDriver z przykładem

Spisie treści:

Anonim

Co to jest JavaScriptExecutor?

JavaScriptExecutor to interfejs, który pomaga wykonywać JavaScript przez Selenium Webdriver. JavaScriptExecutor udostępnia dwie metody „executescript” i „executeAsyncScript” do uruchamiania javascript w wybranym oknie lub na bieżącej stronie.

W tym samouczku nauczysz się -

  • Co to jest JavaScriptExecutor?
  • Dlaczego potrzebujemy JavaScriptExecutor?
  • Metody JavaScriptExecutor
  • Przykład executeAsyncScript
    • Przykład 1: Uśpienie w testowanej przeglądarce.
  • Przykład executeScript
    • 1) Przykład: Kliknij przycisk, aby się zalogować i wygenerować okno alertu
    • 2) Przykład: przechwytywanie danych i przechodzenie do różnych stron
    • 3) Przykład: Przewiń w dół

Dlaczego potrzebujemy JavaScriptExecutor?

W Selenium Webdriver lokalizatory takie jak XPath, CSS itp. Służą do identyfikacji i wykonywania operacji na stronie internetowej.

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

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

Metody JavaScriptExecutor

  1. executeAsyncScript

Dzięki skryptowi asynchronicznemu Twoja strona renderuje się szybciej. Zamiast zmuszać użytkowników do czekania na pobranie skryptu przed wyrenderowaniem strony. Ta funkcja wykona asynchroniczny fragment JavaScript w kontekście aktualnie wybranej ramki lub okna w Selenium. Tak wykonany JS jest jednowątkowy z różnymi funkcjami zwrotnymi, które działają synchronicznie.

  1. executeScript

Ta metoda wykonuje JavaScript w kontekście aktualnie wybranej ramki lub okna w Selenium. Skrypt użyty w tej metodzie działa w treści funkcji anonimowej (funkcja bez nazwy). Możemy mu też przekazać skomplikowane argumenty.

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

  • Boolean
  • Długo
  • Strunowy
  • Lista
  • WebElement.

Podstawowa składnia JavascriptExecutor jest podana poniżej:

Składnia:

JavascriptExecutor js = (JavascriptExecutor) sterownik;js.executeScript (skrypt, argumenty);
  • Skrypt - to jest JavaScript, który musi zostać wykonany.
  • Argumenty - to argumenty do skryptu. To jest opcjonalne.

Przykład executeAsyncScript

Korzystanie z executeAsyncScript pomaga poprawić wydajność testu. Umożliwia pisanie testu bardziej jak normalne kodowanie.

ExecSync blokuje dalsze akcje wykonywane przez przeglądarkę Selenium, ale execAsync nie blokuje akcji. Po wykonaniu skryptu wyśle ​​wywołanie zwrotne do pakietu testowego po stronie serwera. Oznacza to, że wszystko w skrypcie zostanie wykonane przez przeglądarkę, a nie serwer.

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

W tym scenariuszu do zilustrowania executeAsyncScript użyjemy witryny demonstracyjnej „Guru99”. W tym przykładzie tak

  • Uruchom przeglądarkę.
  • Otwórz witrynę „http://demo.guru99.com/V4/”.
  • Aplikacja czeka 5 sekund na wykonanie dalszej czynności.

Krok 1) Przechwyć czas rozpoczęcia przed czekaniem przez 5 sekund (5000 milisekund) za pomocą metody executeAsyncScript ().

Krok 2) Następnie użyj funkcji executeAsyncScript (), aby poczekać 5 sekund.

Krok 3) Następnie uzyskaj aktualny czas.

Krok 4) Odejmij (aktualny czas - czas rozpoczęcia) = miniony czas.

Krok 5) Sprawdź, czy wynik powinien 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;klasa publiczna JavaSE_Test {@Testpublic void Zaloguj się (){Sterownik WebDriver = nowy FirefoxDriver ();// Tworzenie obiektu interfejsu JavascriptExecutor przez rzutowanie typuJavascriptExecutor js = (JavascriptExecutor) sterownik;// Uruchomienie witryny.driver.get („http://demo.guru99.com/V4/”);// Maksymalizuj oknodriver.manage (). window (). maximize ();// Ustaw limit czasu skryptu na 20 sekunddriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Zadeklaruj i ustaw czas rozpoczęcialong start_time = System.currentTimeMillis ();// Wywołaj metodę executeAsyncScript (), aby odczekać 5 sekundjs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Uzyskaj różnicę (currentTime - startTime) czasów.System.out.println ("Minął czas: + (System.currentTimeMillis () - start_time));}}

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

[TestNG] Trwa:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN Nie znaleziono programów dołączających dla programu rejestrującego (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Proszę poprawnie zainicjować system log4j.log4j: WARN Zobacz http://logging.apache.org/log4j/1.2/faq.html#noconfig, aby uzyskać więcej informacji.Upłynął czas: 5022PASSED: Zaloguj się=================================================Test domyślnyTesty odbywają się: 1, niepowodzenia: 0, przeskoki: 0=================================================

Przykład executeScript

W przypadku executeScript zobaczymy kolejno trzy różne przykłady.

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

W tym scenariuszu wykorzystamy witrynę demonstracyjną „Guru99” do zilustrowania JavaScriptExecutor. W tym przykładzie

  • Uruchom przeglądarkę internetową
  • otwórz witrynę „http://demo.guru99.com/V4/” i
  • zaloguj się za pomocą poświadczeń
  • Wyświetl okno alertu po pomyślnym zalogowaniu.
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;klasa publiczna JavaSE_Test {@Testpublic void Zaloguj się (){Sterownik WebDriver = nowy FirefoxDriver ();// Tworzenie obiektu interfejsu JavascriptExecutor przez rzutowanie typuJavascriptExecutor js = (JavascriptExecutor) sterownik;// Uruchomienie witryny.driver.get („http://demo.guru99.com/V4/”);WebElement button = driver.findElement (By.name ("btnLogin"));// Zaloguj się do Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("hasło")). sendKeys ("amUpenu");// Wykonaj Kliknij przycisk LOGIN za pomocą JavascriptExecutorjs.executeScript ("arguments [0] .click ();", przycisk);// Aby wygenerować okno alertu za pomocą JavascriptExecutor. Wyświetl komunikat ostrzegawczyjs.executeScript ("alert ('Witamy w Guru99');");}}

Dane wyjściowe: gdy kod zostanie wykonany pomyślnie. Będziesz obserwował

  • Pomyślne kliknięcie przycisku logowania i pliku
  • Zostanie wyświetlone okno alertu (patrz ilustracja poniżej).

2) Przykład: przechwytywanie danych Scrape i przechodzenie 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 witryny, nazwa tytułu i nazwa domeny witryny.
  • Następnie przejdź do innej strony.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;klasa publiczna JavaSE_Test {@Testpublic void Zaloguj się (){Sterownik WebDriver = nowy FirefoxDriver ();// Tworzenie obiektu interfejsu JavascriptExecutor przez rzutowanie typuJavascriptExecutor js = (JavascriptExecutor) sterownik;// Uruchomienie witryny.driver.get („http://demo.guru99.com/V4/”);// Pobieranie nazwy domeny witryny. Tostring () zmienia obiekt na nazwę.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nazwa domeny witryny =" + DomainName);// Pobieranie adresu URL witryny. Tostring () zmienia obiekt na nazwęString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL witryny =" + adres URL);// Metoda document.title pobiera nazwę tytułu witryny. Tostring () zmienia obiekt na nazwęString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Tytuł strony =" + Tytuł);// Przejdź do nowej strony, czyli wygeneruj stronę dostępu. (uruchom nowy adres URL)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Dane wyjściowe: gdy powyższy kod zostanie pomyślnie wykonany, pobierze szczegóły witryny i przejdzie do innej strony, jak pokazano poniżej.

[TestNG] Trwa:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN Nie znaleziono programów dołączających dla programu rejestrującego (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Proszę poprawnie zainicjować system log4j.log4j: WARN Zobacz http://logging.apache.org/log4j/1.2/faq.html#noconfig, aby uzyskać więcej informacji.Nazwa domeny witryny = demo.guru99.comURL witryny = http://demo.guru99.com/V4/Tytuł strony = Strona główna banku Guru99PASSED: Zaloguj się=================================================Test domyślnyTesty odbywają się: 1, niepowodzenia: 0, przeskoki: 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;klasa publiczna JavaSE_Test {@Testpublic void Zaloguj się (){Sterownik WebDriver = nowy FirefoxDriver ();// Tworzenie obiektu interfejsu JavascriptExecutor przez rzutowanie typuJavascriptExecutor js = (JavascriptExecutor) sterownik;// Uruchomienie witryny.driver.get („http://moneyboats.com/”);// Maksymalizuj oknodriver.manage (). window (). maximize ();// Przewiń w dół o 600 pikseli w pioniejs.executeScript ("window.scrollBy (0,600)");}}

Wyjście : po wykonaniu powyższego kodu przewinie się on w dół o 600 pikseli (patrz obrazek poniżej).

Podsumowanie:

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

  • JavaScriptExecutor udostępnia dwie metody „executescript” i „executeAsyncScript” do obsługi.
  • Wykonano JavaScript przy użyciu Selenium Webdriver.
  • Zilustrowano, jak kliknąć element za pomocą JavaScriptExecutor, jeśli selen nie kliknie elementu z powodu jakiegoś problemu.
  • Wygenerowano okno „Alert” przy użyciu JavaScriptExecutor.
  • Przejście do innej strony przy użyciu JavaScriptExecutor.
  • Przewinięto okno w dół za pomocą JavaScriptExecutor.
  • Pobrano adres URL, tytuł i nazwę domeny przy użyciu JavaScriptExecutor.