JavaScriptExecutor'da Selenium WebDriver (Örnek)

⚡ Akıllı Özet

JavaScriptExecutor'da Selenium WebDriver çalışıyor JavaKonum belirleyiciler yetersiz kaldığında tarayıcı içinde çalıştırılacak komut dosyası. LessBu bölümde executeScript, executeAsyncScript, scroll, click, alerts ve form input örnekleri ele alınmaktadır.

  • ⚙️ Limitleri çözer: Gizli unsurları atlar ve JavaYoğun metin içeren sayfalar.
  • 🧩 İki Yöntem: executeScript senkronize olarak çalışır; executeAsyncScript ise geri çağırma işlevi aracılığıyla eşzamansız işlemleri yönetir.
  • 📜 Kaydırma: Pencereyi kaydırın, koordinatlara atlayın veya bir öğeyi görünür hale getirin.
  • 🖱️ Gizli Tıklamalar: WebDriver'ın erişemediği öğelerde click() işlevini tetikleyin.
  • 📝 Form Kontrolü: Zorlu öğelere değerler ekleyin ve metin okuyun.
  • 🤖 Yapay Zeka Örnekleri: Yapay zeka araçları üretir JavaScriptExecutor kodunu düzenleyin ve kararsız seçicileri düzeltin.

JavaScriptExecutor'da Selenium

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.

JavaKomut DosyasıYürütücü

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, “Guru99” demo alanı, örnek olarak gösterilecektir. JavaScriptExecutor. Bu örnekte,

Oturum Açmak ve Uyarı Penceresi Oluşturmak İçin Bir Düğmeye Tıklayın JavaKomut DosyasıYürütücü

  • 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).

Oturum Açmak ve Uyarı Penceresi Oluşturmak İçin Bir Düğmeye Tıklayın JavaKomut DosyasıYürütücü

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 detaylarını al, örneğin: URL Sitenin adı, başlığı ve alan adı.
  • 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.

Verileri Kazıyın ve Kullanarak Farklı Sayfalara Gidin JavaKomut DosyasıYürütücü

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

Verileri Kazıyın ve Kullanarak Farklı Sayfalara Gidin JavaKomut DosyasıYürütücü

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).

Kullanarak Aşağı Kaydırın JavaKomut DosyasıYürütücü

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, “GuruexecuteAsyncScript'i göstermek için 99” demo sitesi. Bu örnekte, şunları yapacaksınız:

  • 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 Alttract (şimdiki zaman – başlangıç ​​zamanı) = geçen zaman.

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

SSS

Konum belirleyiciler başarısız olduğunda, gizli öğeler, kaydırma veya DOM erişimi için WebDriver bunları kullanıma sunmaz.

Evet. Copilot kod parçacıkları oluşturur, kaydırma desenleri önerir ve kararsız testleri yeniden düzenler.

Evet. Testim ve Mabl otomatik iyileştirme seçicilerini ekleyin. JavaKomut dosyası yedeklemeleri.

`executeScript` senkronize çalışır. `executeAsyncScript` ise eşzamansız kod için geri çağırma fonksiyonu aracılığıyla tamamlanır.

js.executeScript(“arguments[0].scrollIntoView(true);”, element) çağrısını yapın.

Yalnızca WebDriver komutları başarısız olduğunda veya DOM manipülasyonu gerektiğinde kullanın.

Hayır. Tetiklenmeden önce window.alert'i geçersiz kılabilir. Yerel diyaloglar için Alert API'yi kullanın.

executeScript sonucunu dönüştürün, örneğin: String t = (String) js.executeScript(“return document.title;”);.

Bu yazıyı şu şekilde özetleyin: