Apa itu JavaScriptExecutor?
JavaScriptExecutor adalah Antarmuka yang membantu mengeksekusi JavaScript melalui Selenium Webdriver. JavaScriptExecutor menyediakan dua metode "executescript" & "executeAsyncScript" untuk menjalankan javascript pada jendela yang dipilih atau halaman saat ini.
Dalam tutorial ini, Anda akan belajar -
- Apa itu JavaScriptExecutor?
- Mengapa kita membutuhkan JavaScriptExecutor?
- Metode JavaScriptExecutor
- Contoh executionAsyncScript
- Contoh 1: Melakukan tidur di browser yang diuji.
- Contoh eksekusi Script
- 1) Contoh: Klik tombol untuk masuk dan menghasilkan jendela Peringatan
- 2) Contoh: Tangkap Mengikis Data dan Arahkan ke halaman yang berbeda
- 3) Contoh: Gulir ke Bawah menggunakan
Mengapa kita membutuhkan JavaScriptExecutor?
Di Selenium Webdriver, pelacak seperti XPath, CSS, dll. Digunakan untuk mengidentifikasi dan menjalankan operasi pada halaman web.
Jika, pelacak ini tidak berfungsi, Anda dapat menggunakan JavaScriptExecutor. Anda dapat menggunakan JavaScriptExecutor untuk melakukan operasi yang diinginkan pada elemen web.
Selenium mendukung javaScriptExecutor. Tidak perlu plugin atau add-on tambahan. Anda hanya perlu mengimpor ( org.openqa.selenium.JavascriptExecutor ) dalam skrip untuk menggunakan JavaScriptExecutor.
Metode JavaScriptExecutor
- eksekusiAsyncScript
Dengan skrip Asynchronous, halaman Anda dirender lebih cepat. Alih-alih memaksa pengguna untuk menunggu skrip didownload sebelum halaman dirender. Fungsi ini akan menjalankan bagian JavaScript yang tidak sinkron dalam konteks bingkai atau jendela yang saat ini dipilih di Selenium. JS yang dieksekusi adalah single-threaded dengan berbagai fungsi callback yang berjalan secara sinkron.
- mengeksekusiScript
Metode ini mengeksekusi JavaScript dalam konteks bingkai atau jendela yang saat ini dipilih di Selenium. Skrip yang digunakan dalam metode ini berjalan di badan fungsi anonim (fungsi tanpa nama). Kami juga bisa memberikan argumen yang rumit untuk itu.
Skrip dapat mengembalikan nilai. Tipe data yang dikembalikan adalah
- Boolean
- Panjang
- Tali
- Daftar
- WebElement.
Sintaks dasar untuk JavascriptExecutor diberikan di bawah ini:
Sintaksis:
JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript (Skrip, Argumen);
- Script - Ini adalah JavaScript yang perlu dijalankan.
- Argumen - Ini adalah argumen ke skrip. Ini opsional.
Contoh executionAsyncScript
Menggunakan executeAsyncScript, membantu meningkatkan kinerja pengujian Anda. Ini memungkinkan tes menulis lebih seperti pengkodean normal.
ExecSync memblokir tindakan lebih lanjut yang dilakukan oleh browser Selenium tetapi execAsync tidak memblokir tindakan tersebut. Ini akan mengirim callback ke server-side Testing suite setelah skrip selesai. Artinya semua yang ada di dalam skrip akan dieksekusi oleh browser dan bukan server.
Contoh 1: Melakukan tidur di browser yang diuji.
Dalam skenario ini, kami akan menggunakan situs demo "Guru99" untuk menggambarkan executionAsyncScript. Dalam contoh ini, Anda akan melakukannya
- Luncurkan browser.
- Buka situs "http://demo.guru99.com/V4/".
- Aplikasi menunggu selama 5 detik untuk melakukan tindakan selanjutnya.
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) Lalu, dapatkan waktu saat ini.
Langkah 4) Kurangi (waktu sekarang - waktu mulai) = waktu berlalu.
Langkah 5) Verifikasi output yang seharusnya ditampilkan lebih dari 5000 milidetik
import java.util.concurrent.TimeUnit;impor org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas publik JavaSE_Test {@Ujipublic void Login (){Driver WebDriver = FirefoxDriver baru ();// Membuat objek antarmuka JavascriptExecutor dengan Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Meluncurkan Situs.driver.get ("http://demo.guru99.com/V4/");// Maksimalkan jendeladriver.manage (). window (). maksimalkan ();// Setel Batas Waktu Skrip menjadi 20 detikdriver.manage (). timeout (). setScriptTimeout (20, TimeUnit.SECONDS);// Nyatakan dan setel waktu mulaistart_time panjang = System.currentTimeMillis ();// Panggil metode executeAsyncScript () untuk menunggu selama 5 detikjs.executeAsyncScript ("window.setTimeout (argumen [arguments.length - 1], 5000);");// Dapatkan perbedaan (currentTime - startTime) kali.System.out.println ("Waktu berlalu: + (System.currentTimeMillis () - start_time));}}
Output: Berhasil menampilkan waktu berlalu lebih dari 5 detik (5000 milidetik) seperti yang ditunjukkan di bawah ini:
[TestNG] Berjalan:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: PERINGATAN Tidak ada appenders yang dapat ditemukan untuk logger (org.apache.http.client.protocol.RequestAddCookies).log4j: PERINGATAN Harap inisialisasi sistem log4j dengan benar.log4j: PERINGATAN Lihat http://logging.apache.org/log4j/1.2/faq.html#noconfig untuk info lebih lanjut.Waktu berlalu: 5022LULUS: Login===============================================Tes defaultPengujian yang dijalankan: 1, Kegagalan: 0, Lompatan: 0===============================================
Contoh eksekusi Script
Untuk executionScript, kita akan melihat tiga contoh berbeda satu per satu.
1) Contoh: Klik tombol untuk login dan menghasilkan jendela Alert menggunakan JavaScriptExecutor.
Dalam skenario ini, kami akan menggunakan situs demo "Guru99" untuk menggambarkan JavaScriptExecutor. Dalam contoh ini,
- Luncurkan browser web
- buka situs "http://demo.guru99.com/V4/" dan
- login dengan kredensial
- Tampilkan jendela peringatan saat login berhasil.
import org.openqa.selenium.By;impor org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas publik JavaSE_Test {@Ujipublic void Login (){Driver WebDriver = FirefoxDriver baru ();// Membuat objek antarmuka JavascriptExecutor dengan Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Meluncurkan Situs.driver.get ("http://demo.guru99.com/V4/");Tombol WebElement = driver.findElement (By.name ("btnLogin"));// Masuk ke Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Lakukan Klik pada tombol LOGIN menggunakan JavascriptExecutorjs.executeScript ("argumen [0] .click ();", tombol);// Untuk membuat jendela Alert menggunakan JavascriptExecutor. Tampilkan pesan peringatanjs.executeScript ("alert ('Welcome to Guru99');");}}
Output: Ketika kode berhasil dijalankan. Anda akan mengamati
- Klik berhasil pada tombol login dan
- Jendela peringatan akan ditampilkan (lihat gambar di bawah).
2) Contoh: Tangkap Mengikis Data dan Arahkan ke halaman yang berbeda menggunakan JavaScriptExecutor.
Jalankan skrip selenium di bawah ini. Dalam contoh ini,
- Luncurkan situs
- Ambil detail situs seperti URL situs, nama judul, dan nama domain situs.
- Kemudian navigasikan ke halaman lain.
impor org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas publik JavaSE_Test {@Ujipublic void Login (){Driver WebDriver = FirefoxDriver baru ();// Membuat objek antarmuka JavascriptExecutor dengan Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Meluncurkan Situs.driver.get ("http://demo.guru99.com/V4/");// Mengambil Nama Domain situs. Tostring () mengubah objek menjadi nama.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nama domain situs =" + NamaDomain);// Mengambil URL situs. Tostring () mengubah objek menjadi namaString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL situs =" + url);// Metode document.title mengambil nama Judul situs. Tostring () mengubah objek menjadi namaString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Judul halaman =" + JudulNama);// Arahkan ke Halaman baru yaitu untuk menghasilkan halaman akses. (luncurkan url baru)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Output: Ketika kode di atas berhasil dijalankan, itu akan mengambil detail situs dan menavigasi ke halaman yang berbeda seperti yang ditunjukkan di bawah ini.
[TestNG] Berjalan:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: PERINGATAN Tidak ada appenders yang dapat ditemukan untuk logger (org.apache.http.client.protocol.RequestAddCookies).log4j: PERINGATAN Harap inisialisasi sistem log4j dengan benar.log4j: PERINGATAN Lihat http://logging.apache.org/log4j/1.2/faq.html#noconfig untuk info lebih lanjut.Nama domain situs = demo.guru99.comURL situs = http://demo.guru99.com/V4/Judul halaman = Halaman Utama Bank Guru99LULUS: Login===============================================Tes defaultPengujian yang dijalankan: 1, Kegagalan: 0, Lompatan: 0===============================================
3) Contoh: Gulir ke Bawah menggunakan JavaScriptExecutor.
Jalankan skrip selenium di bawah ini. Dalam contoh ini,
- Luncurkan situs
- Gulir ke bawah sebesar 600 piksel
impor org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas publik JavaSE_Test {@Ujipublic void Login (){Driver WebDriver = FirefoxDriver baru ();// Membuat objek antarmuka JavascriptExecutor dengan Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Meluncurkan Situs.driver.get ("http://moneyboats.com/");// Maksimalkan jendeladriver.manage (). window (). maksimalkan ();// Gulir vertikal ke bawah sebanyak 600 pikseljs.executeScript ("window.scrollBy (0,600)");}}
Output : Ketika kode di atas dijalankan, itu akan menggulir ke bawah sebesar 600 piksel (lihat gambar di bawah).
Ringkasan:
JavaScriptExecutor digunakan saat Selenium Webdriver gagal mengklik elemen apa pun karena beberapa masalah.
- JavaScriptExecutor menyediakan dua metode "executescript" & "executeAsyncScript" untuk ditangani.
- Menjalankan JavaScript menggunakan Selenium Webdriver.
- Diilustrasikan cara mengklik elemen melalui JavaScriptExecutor, jika selenium gagal mengklik elemen karena beberapa masalah.
- Menghasilkan jendela 'Alert' menggunakan JavaScriptExecutor.
- Menavigasi ke halaman berbeda menggunakan JavaScriptExecutor.
- Gulir ke bawah jendela menggunakan JavaScriptExecutor.
- URL, judul, dan nama domain yang diambil menggunakan JavaScriptExecutor.