Co je to JavaScriptExecutor?
JavaScriptExecutor je rozhraní, které pomáhá spouštět JavaScript prostřednictvím selenového webdriveru. JavaScriptExecutor poskytuje dvě metody "executescript" & "executeAsyncScript" pro spuštění javascript ve vybraném okně nebo na aktuální stránce.
V tomto výukovém programu se naučíte -
- Co je to JavaScriptExecutor?
- Proč potřebujeme JavaScriptExecutor?
- Metody jazyka JavaScriptExecutor
- Příklad executeAsyncScript
- Příklad 1: Spánek v testovaném prohlížeči.
- Příklad executeScript
- 1) Příklad: Kliknutím na tlačítko se přihlásíte a vygenerujete výstražné okno
- 2) Příklad: Zachyťte data oškrábání a přejděte na jiné stránky
- 3) Příklad: Přejděte dolů pomocí
Proč potřebujeme JavaScriptExecutor?
V Selenium Webdriver se k identifikaci a provádění operací na webové stránce používají lokátory jako XPath, CSS atd.
V případě, že tyto vyhledávače nefungují, můžete použít JavaScriptExecutor. Můžete použít JavaScriptExecutor k provedení požadované operace s webovým prvkem.
Selenium podporuje javaScriptExecutor. Není potřeba žádný další plugin nebo doplněk. Musíte pouze importovat ( org.openqa.selenium.JavascriptExecutor ) do skriptu, abyste mohli používat JavaScriptExecutor.
Metody jazyka JavaScriptExecutor
- executeAsyncScript
S asynchronním skriptem se vaše stránka vykresluje rychleji. Místo toho, aby nutili uživatele čekat na stažení skriptu před vykreslením stránky. Tato funkce provede asynchronní část JavaScriptu v kontextu aktuálně vybraného rámečku nebo okna v selenu. Takto provedený JS je jednovláknový s různými funkcemi zpětného volání, které běží synchronně.
- executeScript
Tato metoda provádí JavaScript v kontextu aktuálně vybraného rámečku nebo okna v selenu. Skript použitý v této metodě běží v těle anonymní funkce (funkce bez názvu). Můžeme k tomu předat i složité argumenty.
Skript může vrátit hodnoty. Vrácené datové typy jsou
- Booleovský
- Dlouho
- Tětiva
- Seznam
- WebElement.
Níže je uvedena základní syntaxe pro JavascriptExecutor:
Syntax:
JavascriptExecutor js = (JavascriptExecutor) ovladač;js.executeScript (skript, argumenty);
- Skript - Toto je JavaScript, který je třeba spustit.
- Argumenty - Jedná se o argumenty ke skriptu. Je to volitelné.
Příklad executeAsyncScript
Použití executeAsyncScript pomáhá zlepšit výkon vašeho testu. Umožňuje psaní testu spíše jako normální kódování.
Funkce execSync blokuje další akce prováděné prohlížečem Selenium, ale execAsync akci neblokuje. Po dokončení skriptu pošle zpětné volání testovací sadě na straně serveru. To znamená, že vše uvnitř skriptu bude provedeno prohlížečem, nikoli serverem.
Příklad 1: Spánek v testovaném prohlížeči.
V tomto scénáři použijeme ukázkový web „Guru99“ k ilustraci executeAsyncScript. V tomto příkladu budete
- Spusťte prohlížeč.
- Otevřete web „http://demo.guru99.com/V4/“.
- Aplikace čeká 5 sekund na provedení další akce.
Krok 1) Zachyťte čas spuštění před čekáním 5 sekund (5 000 milisekund) pomocí metody executeAsyncScript ().
Krok 2) Poté použijte executeAsyncScript () a počkejte 5 sekund.
Krok 3) Poté získejte aktuální čas.
Krok 4) Odečíst (aktuální čas - čas zahájení) = uplynulý čas.
Krok 5) Ověřte výstup, který by měl zobrazovat více než 5 000 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;veřejná třída JavaSE_Test {@Testveřejné neplatné přihlášení (){Ovladač WebDriver = nový FirefoxDriver ();// Vytvoření objektu rozhraní JavascriptExecutor pomocí odlévání typuJavascriptExecutor js = (JavascriptExecutor) ovladač;// Spuštění webu.driver.get ("http://demo.guru99.com/V4/");// Maximalizovat oknodriver.manage (). window (). maximize ();// Nastavte časový limit skriptu na 20 sekunddriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Deklarujte a nastavte čas zahájenílong start_time = System.currentTimeMillis ();// Voláním metody executeAsyncScript () počkejte 5 sekundjs.executeAsyncScript ("window.setTimeout (argumenty [argumenty.délka - 1], 5 000);");// Získejte rozdíl (currentTime - startTime) časů.System.out.println ("Uplynulý čas: + (System.currentTimeMillis () - start_time));}}
Výstup: Úspěšně zobrazen uplynulý čas více než 5 sekund (5 000 milisekund), jak je znázorněno níže:
[TestNG] Spuštěno:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: POZOR Nebyly nalezeny žádné dodatky pro záznamník (org.apache.http.client.protocol.RequestAddCookies).log4j: UPOZORNĚNÍ Inicializujte prosím správně systém log4j.log4j: VAROVÁNÍ Další informace naleznete na stránce http://logging.apache.org/log4j/1.2/faq.html#noconfig.Uplynulý čas: 5022PASSED: Přihlášení================================================Výchozí testProvedené testy: 1, selhání: 0, přeskočení: 0================================================
Příklad executeScript
Pro executeScript uvidíme tři různé příklady jeden po druhém.
1) Příklad: Kliknutím na tlačítko se přihlásíte a vygenerujete výstražné okno pomocí JavaScriptu.
V tomto scénáři použijeme pro ilustraci JavaScriptu ukázkový web „Guru99“. V tomto příkladu
- Spusťte webový prohlížeč
- otevřete web "http://demo.guru99.com/V4/" a
- přihlaste se pomocí přihlašovacích údajů
- Zobrazit výstražné okno o ú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;veřejná třída JavaSE_Test {@Testveřejné neplatné přihlášení (){Ovladač WebDriver = nový FirefoxDriver ();// Vytvoření objektu rozhraní JavascriptExecutor pomocí odlévání typuJavascriptExecutor js = (JavascriptExecutor) ovladač;// Spuštění webu.driver.get ("http://demo.guru99.com/V4/");Tlačítko WebElement = driver.findElement (By.name ("btnLogin"));// Přihlášení na Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("heslo")). sendKeys ("amUpenu");// Provedení Klikněte na tlačítko PŘIHLÁŠENÍ pomocí JavascriptExecutorjs.executeScript ("argumenty [0] .click ();", tlačítko);// Generování výstražného okna pomocí JavascriptExecutor. Zobrazit výstražnou zprávujs.executeScript ("upozornění ('Vítejte na Guru99');");}}
Výstup: Když je kód úspěšně proveden. Budete pozorovat
- Úspěšné kliknutí na přihlašovací tlačítko a
- Zobrazí se výstražné okno (viz obrázek níže).
2) Příklad: Zachyťte data oškrábání a přejděte na jiné stránky pomocí nástroje JavaScriptExecutor.
Proveďte níže uvedený selenový skript. V tomto příkladu
- Spusťte web
- Načtěte podrobnosti o webu, jako je URL webu, název titulu 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;veřejná třída JavaSE_Test {@Testveřejné neplatné přihlášení (){Ovladač WebDriver = nový FirefoxDriver ();// Vytvoření objektu rozhraní JavascriptExecutor pomocí odlévání typuJavascriptExecutor js = (JavascriptExecutor) ovladač;// Spuštění webu.driver.get ("http://demo.guru99.com/V4/");// Načítání názvu domény webu. Tostring () změní objekt na název.Řetězec DomainName = js.executeScript ("návrat document.domain;"). ToString ();System.out.println ("Název domény webu =" + Název domény);// Načítání adresy URL webu. Tostring () změní objekt na názevŘetězec url = js.executeScript ("návratový dokument.URL;"). ToString ();System.out.println ("URL webu =" + url);// Metoda document.title načte Název názvu webu. Tostring () změní objekt na názevŘetězec TitleName = js.executeScript ("návrat document.title;"). ToString ();System.out.println ("Název stránky =" + NázevNázev);// Přejít na novou stránku, tj. Vygenerovat přístupovou stránku. (spustit novou adresu URL)js.executeScript ("window.location = 'http://demo.guru99.com/'"));}}
Výstup: Pokud je výše uvedený kód úspěšně proveden, načte podrobnosti o webu a přejde na jinou stránku, jak je znázorněno níže.
[TestNG] Spuštěno:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: POZOR Nebyly nalezeny žádné dodatky pro záznamník (org.apache.http.client.protocol.RequestAddCookies).log4j: UPOZORNĚNÍ Inicializujte prosím správně systém log4j.log4j: VAROVÁNÍ Další informace naleznete na stránce http://logging.apache.org/log4j/1.2/faq.html#noconfig.Název domény webu = demo.guru99.comURL stránky = http://demo.guru99.com/V4/Název stránky = Domovská stránka banky Guru99 BankPASSED: Přihlášení================================================Výchozí testProvedené testy: 1, selhání: 0, přeskočení: 0================================================
3) Příklad: Přejděte dolů pomocí JavaScriptExecutor.
Proveďte níže uvedený selenový skript. V tomto příkladu
- Spusťte web
- Přejděte 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;veřejná třída JavaSE_Test {@Testveřejné neplatné přihlášení (){Ovladač WebDriver = nový FirefoxDriver ();// Vytvoření objektu rozhraní JavascriptExecutor pomocí odlévání typuJavascriptExecutor js = (JavascriptExecutor) ovladač;// Spuštění webu.driver.get ("http://moneyboats.com/");// Maximalizovat oknodriver.manage (). window (). maximize ();// Svislé posouvání dolů o 600 pixelůjs.executeScript ("window.scrollBy (0,600)");}}
Výstup : Po provedení výše uvedeného kódu se posune dolů o 600 pixelů (viz obrázek níže).
Souhrn:
JavaScriptExecutor se používá, když Selenium Webdriver neklikne na jakýkoli prvek kvůli nějakému problému.
- JavaScriptExecutor poskytuje ke zpracování dvě metody „executescript“ a „executeAsyncScript“.
- Spustil JavaScript pomocí selenového webdriveru.
- Ilustrované, jak kliknout na prvek pomocí JavaScriptu, pokud selen selže kliknout na prvek kvůli nějakému problému.
- Vygenerovalo se okno „Alert“ pomocí JavaScriptExecutor.
- Přejít na jinou stránku pomocí JavaScriptuExecutor.
- Posun dolů oknem pomocí JavaScriptExecutor.
- Načtená adresa URL, název a název domény pomocí nástroje JavaScriptExecutor.