JavaScriptExecutor di Selenium dengan Contoh

Apa itu JavaPelaksana Skrip?

JavaScriptExecutor adalah Antarmuka yang membantu untuk mengeksekusi JavaSkrip melalui Selenium driver web. JavaScriptExecutor menyediakan dua metode “executescript” & “executeAsyncScript” untuk menjalankan javascript pada jendela yang dipilih atau halaman saat ini.

JavaPelaksana Skrip

Mengapa kita membutuhkan JavaPelaksana Skrip?

In Selenium Webdriver, penentu lokasi seperti XPath, CSS, dll. digunakan untuk mengidentifikasi dan melakukan operasi pada halaman web.

Jika pencari lokasi ini tidak berfungsi, Anda dapat menggunakannya JavaScriptExecutor. Anda dapat menggunakan JavaScriptExecutor untuk melakukan operasi yang diinginkan pada elemen web.

Selenium mendukung javaScriptExecutor. Tidak diperlukan plugin atau add-on tambahan. Anda hanya perlu mengimpor (org.openqa.selenium.JavascriptPelaksana) dalam skrip yang akan digunakan JavaPelaksana Skrip.

JavaMetode ScriptExecutor di Selenium

mengeksekusi Script

Metode ini dijalankan JavaNaskah dalam konteks bingkai atau jendela yang dipilih saat ini Selenium. Skrip yang digunakan dalam metode ini berjalan di badan fungsi anonim (fungsi tanpa nama). Kita juga bisa menyampaikan argumen yang rumit padanya.

Skrip dapat mengembalikan nilai. Tipe data yang dikembalikan adalah

  • Boolean
  • Panjang
  • String
  • Daftar
  • Elemen Web.

JavascriptSintaks pelaksana:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Naskah - Ini adalah JavaSkrip yang perlu dieksekusi.
  • kasus – Ini adalah argumen pada naskah. Itu opsional.

eksekusiAsyncScript

Dengan skrip Asinkron, halaman Anda akan ditampilkan lebih cepat. Daripada memaksa pengguna menunggu skrip diunduh sebelum halaman ditampilkan. Fungsi ini akan menjalankan bagian asinkron dari JavaSkrip dalam konteks bingkai atau jendela yang saat ini dipilih di SeleniumJS yang dieksekusi adalah single-threaded dengan berbagai fungsi callback yang berjalan secara sinkron.

Cara penggunaan JavaScriptExecutor di Selenium

Berikut adalah proses langkah demi langkah tentang cara menggunakannya JavaScriptExecutor di Selenium:

Langkah 1) Impor paketnya.

import org.openqa.selenium.JavascriptExecutor;

Langkah 2) Buat Referensi.

JavascriptExecutor js = (JavascriptExecutor) driver;

Langkah 3) Sebut JavascriptMetode pelaksana.

js.executeScript(script, args);

Contoh Klik Elemen menggunakan JavaScriptExecutor di Selenium

Untuk mengeksekusiScript, kita akan melihat tiga contoh berbeda satu per satu.

1) Contoh: Klik tombol untuk login dan menghasilkan jendela Peringatan menggunakan JavaPelaksana Skrip.

Dalam skenario ini, kami akan menggunakan situs demo “Guru99” sebagai ilustrasi JavaScriptExecutor. Dalam contoh ini,

Klik Tombol Untuk Masuk Dan Menghasilkan Jendela Peringatan Menggunakan JavaPelaksana Skrip

  • Tampilkan jendela peringatan saat login berhasil.
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');");   
    		
    }		
}

Keluaran: Ketika kode berhasil dieksekusi. Anda akan mengamati

  • Klik berhasil pada tombol login dan
  • Jendela peringatan akan ditampilkan (lihat gambar di bawah).

Klik Tombol Untuk Masuk Dan Menghasilkan Jendela Peringatan Menggunakan JavaPelaksana Skrip

2) Contoh: Ambil Data Scrape dan Navigasi ke halaman berbeda menggunakan JavaPelaksana Skrip.

Jalankan skrip selenium di bawah ini. Dalam contoh ini,

  • Luncurkan situsnya
  • Dapatkan rincian situs seperti URL situs, nama judul, dan nama domain situs.
  • Kemudian navigasikan ke halaman lain.
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/'");			
    }		
}

Keluaran: Bila kode di atas berhasil dijalankan, maka akan diambil rincian situs dan diarahkan ke halaman lain seperti ditunjukkan di bawah ini.

Ambil Data Scrape Dan Navigasikan Ke Halaman Berbeda Menggunakan JavaPelaksana Skrip

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

Ambil Data Scrape Dan Navigasikan Ke Halaman Berbeda Menggunakan JavaPelaksana Skrip

3) Contoh: Gulir ke Bawah menggunakan JavaPelaksana Skrip.

Jalankan skrip selenium di bawah ini. Dalam contoh ini,

  • Luncurkan situsnya
  • Gulir ke bawah sebesar 600 piksel
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)");			
    }		
}

Keluaran: Ketika kode di atas dijalankan, kode tersebut akan bergulir ke bawah sebesar 600 piksel (lihat gambar di bawah).

Gulir ke Bawah Menggunakan JavaPelaksana Skrip

Contoh executeAsyncScript di Selenium

Menggunakan executeAsyncScript membantu meningkatkan kinerja pengujian Anda. Ini memungkinkan penulisan pengujian lebih seperti pengkodean normal.

eksekutifSync memblokir tindakan lebih lanjut yang dilakukan oleh Selenium browser tetapi execAsync tidak memblokir tindakan. Ini akan mengirim panggilan balik ke sisi server pengujian suite setelah skrip selesai. Artinya semua yang ada di dalam skrip akan dieksekusi oleh browser dan bukan server.

Contoh 1: Melakukan mode tidur pada browser yang sedang diuji.

Dalam skenario ini, kita akan menggunakan situs demo “Guru99” untuk mengilustrasikan executeAsyncScript. Dalam contoh ini, Anda akan

Langkah 1) Tangkap waktu mulai sebelum menunggu selama 5 detik (5000 milidetik) dengan menggunakan metode executeAsyncScript().

Langkah 2) Kemudian, gunakan executeAsyncScript() untuk menunggu 5 detik.

Langkah 3) Kemudian, dapatkan waktu saat ini.

Langkah 4) Kurangi (waktu saat ini – waktu mulai) = waktu yang berlalu.

Langkah 5) Verifikasikan output yang ditampilkannya lebih dari 5000 milidetik

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));					
                    		
    }		
}			

Keluaran: Berhasil menampilkan waktu yang berlalu lebih dari 5 detik (5000 milidetik) seperti yang ditunjukkan di bawah ini:

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

Kesimpulan

JavaScriptExecutor digunakan saat Selenium Webdriver gagal mengklik elemen apa pun karena beberapa masalah.

  • JavaScriptExecutor menyediakan dua metode “executescript” & “executeAsyncScript” untuk menanganinya.
  • Dieksekusi JavaSkrip menggunakan Selenium driver web.
  • Diilustrasikan cara mengklik suatu elemen JavaScriptExecutor, jika selenium gagal mengklik elemen karena beberapa masalah.
  • Menghasilkan jendela 'Peringatan' menggunakan JavaPelaksana Skrip.
  • Dinavigasi ke halaman lain menggunakan JavaPelaksana Skrip.
  • Gulir ke bawah jendela menggunakan JavaPelaksana Skrip.
  • URL, judul, dan nama domain yang diambil menggunakan JavaPelaksana Skrip.