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.
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,
- Luncurkan peramban web
- buka situsnya https://demo.guru99.com/V4/ dan
- masuk dengan kredensial
- 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).
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.
[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) 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).
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
- Luncurkan peramban.
- Buka situs https://demo.guru99.com/V4/.
- Aplikasi menunggu 5 detik untuk melakukan tindakan lebih lanjut.
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.