JavaScriptExecutor'da Selenium Örnek ile
Nedir? JavaScriptExecutor?
JavaScriptExecutor, yürütmeye yardımcı olan bir arayüzdür JavaKomut dosyası aracılığıyla Selenium Web sürücüsü. JavaScriptExecutor, seçili pencerede veya geçerli sayfada javascript'i çalıştırmak için “executescript” ve “executeAsyncScript” adlı iki yöntem sağlar.
Neden ihtiyacımız var JavaScriptExecutor?
In Selenium Web sürücüsü, XPath, CSS vb. gibi konum belirleyiciler, bir web sayfasındaki işlemleri tanımlamak ve gerçekleştirmek için kullanılır.
Bu konumlayıcıların çalışmaması durumunda kullanabilirsiniz JavaScriptExecutor. Kullanabilirsiniz JavaBir web elemanı üzerinde istenilen işlemi gerçekleştirmek için ScriptExecutor.
Selenium javaScriptExecutor'u destekler. Ekstra bir eklentiye veya eklentiye gerek yoktur. Sadece içe aktarmanız gerekiyor (org.openqa.selenium.Javascriptvasiyet hükümlerini gerçekleştiren erkek) komut dosyasında kullanılacak şekilde JavaKomutDosyasıYürütücüsü.
JavaScriptExecutor Yöntemleri Selenium
yürütmeScripti
Bu yöntem yürütülür JavaSenaryo o anda seçili olan çerçeve veya pencere bağlamında Selenium. Bu yöntemde kullanılan komut dosyası, anonim bir işlevin (adı olmayan bir işlev) gövdesinde çalışır. Ona karmaşık argümanlar da aktarabiliriz.
Komut dosyası değerleri döndürebilir. Döndürülen veri türleri şunlardır:
- Boole
- Uzun
- dizi
- Liste
- WebElement.
JavascriptYürütücü sözdizimi:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Senaryo - Bu JavaÇalıştırılması gereken komut dosyası.
- Argümanlar – Senaryonun argümanlarıdır. Bu isteğe bağlıdır.
AsyncScript'i çalıştır
Eşzamansız betikle sayfanız daha hızlı işlenir. Kullanıcıların sayfa işlenmeden önce bir betiğin indirilmesini beklemesini zorlamak yerine. Bu işlev, eşzamansız bir parçayı yürütecektir. JavaŞu anda seçili olan çerçeve veya pencere bağlamındaki komut dosyası SeleniumBu şekilde yürütülen JS, senkron olarak çalışan çeşitli geri çağırma fonksiyonlarına sahip tek iş parçacıklıdır.
Nasıl kullanılır? JavaScriptExecutor'da Selenium
İşte nasıl kullanılacağına dair adım adım bir süreç JavaScriptExecutor'da Selenium:
) 1 Adım Paketi içe aktarın.
import org.openqa.selenium.JavascriptExecutor;
) 2 Adım Bir Referans Oluşturun.
JavascriptExecutor js = (JavascriptExecutor) driver;
) 3 Adım Ara JavascriptYürütücü yöntemi.
js.executeScript(script, args);
Kullanarak Bir Öğeye Tıklama Örneği JavaScripExecutor'da Selenium
ExecuteScript için üç farklı örneği tek tek göreceğiz.
1) Örnek: Giriş yapmak ve Uyarı penceresini oluşturmak için bir düğmeye tıklayın. JavaKomutDosyasıYürütücüsü.
Bu senaryoda, örnek olarak “Guru99” demo sitesini kullanacağız. JavaScriptExecutor. Bu örnekte,
- Web tarayıcısını başlat
- siteyi aç https://demo.guru99.com/V4/ ve
- kimlik bilgileriyle giriş yap
- Başarılı oturum açma durumunda uyarı penceresini görüntüle.
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');"); } }
Çıktı: Kod başarıyla yürütüldüğünde. gözlemleyeceksin
- Giriş düğmesine başarılı bir şekilde tıklayın ve
- Uyarı penceresi görüntülenecektir (aşağıdaki resme bakın).
2) Örnek: Kazıma Verilerini Yakalayın ve şunu kullanarak farklı sayfalara gidin: JavaKomutDosyasıYürütücüsü.
Aşağıdaki selenyum betiğini yürütün. Bu örnekte,
- Siteyi başlat
- Sitenin URL'si, başlık adı ve alan adı gibi sitenin ayrıntılarını alın.
- Daha sonra farklı bir sayfaya gidin.
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/'"); } }
Çıktı: Yukarıdaki kod başarıyla yürütüldüğünde, sitenin ayrıntılarını getirecek ve aşağıda gösterildiği gibi farklı bir sayfaya yönlendirecektir.
[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) Örnek: kullanarak Aşağı Kaydırın JavaKomutDosyasıYürütücüsü.
Aşağıdaki selenyum betiğini yürütün. Bu örnekte,
- Siteyi başlat
- 600 piksel aşağı kaydır
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)"); } }
Çıktı: Yukarıdaki kod çalıştırıldığında 600 piksel aşağı kaydırılacaktır (aşağıdaki resme bakın).
executeAsyncScript örneği Selenium
executeAsyncScript'i kullanmak, testinizin performansını iyileştirmeye yardımcı olur. Testin normal kodlamaya daha çok benzemesini sağlar.
yöneticiSync tarafından gerçekleştirilen diğer eylemleri engeller Selenium tarayıcı ancak execAsync eylemi engellemez. Sunucu tarafına bir geri arama gönderecektir Test yapmak Senaryo tamamlandığında süit. Bu, betiğin içindeki her şeyin sunucu tarafından değil tarayıcı tarafından yürütüleceği anlamına gelir.
Örnek 1: Test edilen tarayıcıda uyku işlemi gerçekleştirme.
Bu senaryoda, executeAsyncScript'i göstermek için "Guru99" demo sitesini kullanacağız. Bu örnekte,
- Tarayıcıyı başlatın.
- Siteyi aç https://demo.guru99.com/V4/.
- Uygulama başka bir işlem gerçekleştirmek için 5 saniye bekler.
) 1 Adım executeAsyncScript() metodunu kullanarak 5 saniye (5000 milisaniye) beklemeden önceki başlangıç zamanını yakalayın.
) 2 Adım Daha sonra executeAsyncScript() fonksiyonunu kullanarak 5 saniye bekleyin.
) 3 Adım Daha sonra güncel saati alın.
) 4 Adım Çıkarma (geçerli saat – başlangıç zamanı) = geçen süre.
) 5 Adım Çıktının 5000 milisaniyeden fazla göstermesi gerektiğini doğrulayın
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)); } }
Çıktı: Aşağıda gösterildiği gibi 5 saniyeden (5000 milisaniye) fazla geçen süre başarıyla görüntülendi:
[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 ===============================================
ÖZET
JavaScriptExecutor şu durumlarda kullanılır: Selenium Web sürücüsü bazı sorunlardan dolayı herhangi bir öğeye tıklayamıyor.
- JavaScriptExecutor, işlemek için “executescript” ve “executeAsyncScript” adlı iki yöntem sağlar.
- Yürütüldü JavaKomut dosyası kullanarak Selenium Web sürücüsü.
- Bir öğeye nasıl tıklanacağını resimli olarak JavaScriptExecutor, selenium bazı sorunlardan dolayı öğeye tıklayamazsa.
- 'Uyarı' penceresini kullanarak oluşturuldu JavaKomutDosyasıYürütücüsü.
- kullanılarak farklı sayfaya gidildi JavaKomutDosyasıYürütücüsü.
- kullanarak pencereyi aşağı kaydırdı. JavaKomutDosyasıYürütücüsü.
- URL, başlık ve alan adı kullanılarak getirildi JavaKomutDosyasıYürütücüsü.