Pelaksana JavaScript di Selenium WebDriver dengan Contoh

Isi kandungan:

Anonim

Apa itu JavaScriptExecutor?

JavaScriptExecutor adalah Antaramuka yang membantu melaksanakan JavaScript melalui Selenium Webdriver. JavaScriptExecutor menyediakan dua kaedah "executescript" & "executeAsyncScript" untuk menjalankan javascript pada tetingkap atau halaman semasa yang dipilih.

Dalam tutorial ini, anda akan belajar -

  • Apa itu JavaScriptExecutor?
  • Mengapa kita memerlukan JavaScriptExecutor?
  • Kaedah Pelaksana JavaScript
  • Contoh executeAsyncScript
    • Contoh 1: Menjalankan tidur dalam penyemak imbas yang sedang diuji.
  • Contoh executeScript
    • 1) Contoh: Klik butang untuk log masuk dan menghasilkan tetingkap Makluman
    • 2) Contoh: Tangkap Mengikis Data dan Navigasi ke halaman yang berbeza
    • 3) Contoh: Tatal Downusing

Mengapa kita memerlukan JavaScriptExecutor?

Dalam Selenium Webdriver, pencari seperti XPath, CSS, dll digunakan untuk mengenal pasti dan melakukan operasi di laman web.

Sekiranya, pencari ini tidak berfungsi, anda boleh menggunakan JavaScriptExecutor. Anda boleh menggunakan JavaScriptExecutor untuk melakukan operasi yang diinginkan pada elemen web.

Selenium menyokong javaScriptExecutor. Tidak memerlukan plugin atau add-on tambahan. Anda hanya perlu mengimport ( org.openqa.selenium.JavascriptExecutor ) dalam skrip untuk menggunakan JavaScriptExecutor.

Kaedah Pelaksana JavaScript

  1. laksanakanAsyncScript

Dengan skrip Asinkron, halaman anda dibuat lebih cepat. Bukannya memaksa pengguna untuk menunggu skrip dimuat sebelum halaman dibuat. Fungsi ini akan melaksanakan sekeping JavaScript yang tidak segerak dalam konteks bingkai atau tetingkap yang sedang dipilih di Selenium. JS yang dieksekusi adalah single-threaded dengan pelbagai fungsi panggilan balik yang berjalan serentak.

  1. eksekusi skrip

Kaedah ini melaksanakan JavaScript dalam konteks bingkai atau tetingkap yang sedang dipilih di Selenium. Skrip yang digunakan dalam kaedah ini berjalan di badan fungsi tanpa nama (fungsi tanpa nama). Kita juga boleh menyampaikan hujah yang rumit kepadanya.

Skrip boleh mengembalikan nilai. Jenis data yang dikembalikan adalah

  • Boolean
  • Lama
  • Tali
  • Senaraikan
  • WebElement.

Sintaks asas untuk JavascriptExecutor diberikan di bawah:

Sintaks:

Pemacu JavascriptExecutor js = (JavascriptExecutor);js.executeScript (Skrip, Hujah);
  • Skrip - Ini adalah JavaScript yang perlu dilaksanakan.
  • Hujah - Ini adalah hujah kepada skrip. Ia pilihan.

Contoh executeAsyncScript

Menggunakan executeAsyncScript, membantu meningkatkan prestasi ujian anda. Ia membolehkan ujian menulis lebih seperti pengekodan biasa.

ExecSync menyekat tindakan selanjutnya yang dilakukan oleh penyemak imbas Selenium tetapi execAsync tidak menyekat tindakan. Ini akan menghantar panggilan balik ke suite Pengujian sisi pelayan setelah skrip selesai. Ini bermaksud semua yang ada di dalam skrip akan dijalankan oleh penyemak imbas dan bukan pelayan.

Contoh 1: Menjalankan tidur dalam penyemak imbas yang sedang diuji.

Dalam senario ini, kami akan menggunakan laman demo "Guru99" untuk menggambarkan executeAsyncScript. Dalam contoh ini, anda akan

  • Lancarkan penyemak imbas.
  • Buka laman web "http://demo.guru99.com/V4/".
  • Permohonan menunggu selama 5 saat untuk melakukan tindakan selanjutnya.

Langkah 1) Tangkap masa mula sebelum menunggu selama 5 saat (5000 milisaat) dengan menggunakan kaedah executeAsyncScript ().

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

Langkah 3) Kemudian, dapatkan masa sekarang.

Langkah 4) Kurangkan (masa semasa - masa mula) = masa berlalu.

Langkah 5) Sahkan output yang sepatutnya dipaparkan lebih dari 5000 milisaat

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;kelas awam JavaSE_Test {@ Ujianlog masuk awam tidak sah (){Pemacu WebDriver = FirefoxDriver baru ();// Membuat objek antara muka JavascriptExecutor dengan Type castingPemacu JavascriptExecutor js = (JavascriptExecutor);// Melancarkan Laman web.driver.get ("http://demo.guru99.com/V4/");// Memaksimumkan tetingkapdriver.manage (). window (). maksimalkan ();// Tetapkan Timeout Skrip hingga 20 saatdriver.manage (). timeout (). setScriptTimeout (20, TimeUnit.SECONDS);// Nyatakan dan tetapkan masa mulastart_time yang panjang = System.currentTimeMillis ();// Panggil kaedah executeAsyncScript () untuk menunggu selama 5 saatjs.executeAsyncScript ("window.setTimeout (argumen [argumen.length - 1], 5000);");// Dapatkan perbezaan (currentTime - startTime) masa.System.out.println ("Masa berlalu: + (System.currentTimeMillis () - start_time));}}

Keluaran: Berjaya menunjukkan masa berlalu lebih dari 5 saat (5000 milisaat) seperti yang ditunjukkan di bawah:

[TestNG] Berlari:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customitusitelog4j: PERINGATAN Tidak ada appenders yang dapat ditemui untuk logger (org.apache.http.client.protocol.RequestAddCookies).log4j: PERINGATAN Sila mulakan sistem log4j dengan betul.log4j: PERINGATAN Lihat http://logging.apache.org/log4j/1.2/faq.html#noconfig untuk maklumat lebih lanjut.Masa berlalu: 5022LULUS: Log masuk===============================================Ujian lalaiUjian dijalankan: 1, Kegagalan: 0, Langkau: 0===============================================

Contoh executeScript

Untuk executeScript, kita akan melihat tiga contoh berbeza satu persatu.

1) Contoh: Klik butang untuk log masuk dan menjana tetingkap Makluman menggunakan JavaScriptExecutor.

Dalam senario ini, kami akan menggunakan laman demo "Guru99" untuk menggambarkan JavaScriptExecutor. Dalam contoh ini,

  • Lancarkan penyemak imbas web
  • buka laman web "http://demo.guru99.com/V4/" dan
  • log masuk dengan kelayakan
  • Paparkan tetingkap amaran apabila berjaya masuk.
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;kelas awam JavaSE_Test {@ Ujianlog masuk awam tidak sah (){Pemacu WebDriver = FirefoxDriver baru ();// Membuat objek antara muka JavascriptExecutor dengan Type castingPemacu JavascriptExecutor js = (JavascriptExecutor);// Melancarkan Laman web.driver.get ("http://demo.guru99.com/V4/");Butang WebElement = driver.findElement (By.name ("btnLogin"));// Log masuk ke Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("kata laluan")). sendKeys ("amUpenu");// Lakukan Klik pada butang LOGIN menggunakan JavascriptExecutorjs.executeScript ("argumen [0]. klik ();", butang);// Untuk menjana tetingkap Makluman menggunakan JavascriptExecutor. Paparkan mesej amaranjs.executeScript ("amaran ('Selamat Datang di Guru99');");}}

Keluaran: Apabila kod berjaya dilaksanakan. Anda akan memerhatikan

  • Klik berjaya pada butang log masuk dan
  • Tetingkap amaran akan dipaparkan (lihat gambar di bawah).

2) Contoh: Tangkap Mengikis Data dan Navigasi ke halaman yang berbeza menggunakan JavaScriptExecutor.

Laksanakan skrip selenium di bawah. Dalam contoh ini,

  • Lancarkan laman web
  • Ambil perincian laman web seperti URL laman web, nama tajuk dan nama domain laman web tersebut.
  • Kemudian arahkan ke halaman lain.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas awam JavaSE_Test {@ Ujianlog masuk awam tidak sah (){Pemacu WebDriver = FirefoxDriver baru ();// Membuat objek antara muka JavascriptExecutor dengan Type castingPemacu JavascriptExecutor js = (JavascriptExecutor);// Melancarkan Laman web.driver.get ("http://demo.guru99.com/V4/");// Mengambil Nama Domain laman web. Tostring () menukar objek ke nama.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nama domain laman web =" + Nama Domain);// Mengambil URL laman web. Tostring () menukar objek ke namaRentetan url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL laman web =" + url);// Kaedah dokumen.title mengambil nama Tajuk laman web. Tostring () menukar objek ke namaString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Tajuk halaman =" + Nama Tajuk);// Navigasi ke Halaman baru iaitu untuk menghasilkan halaman akses. (lancarkan url baru)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Keluaran: Apabila kod di atas dilaksanakan dengan jayanya, ia akan mengambil perincian laman web dan menavigasi ke halaman yang berbeza seperti yang ditunjukkan di bawah.

[TestNG] Berlari:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customuite.xmllog4j: PERINGATAN Tidak ada appenders yang dapat ditemui untuk logger (org.apache.http.client.protocol.RequestAddCookies).log4j: PERINGATAN Sila mulakan sistem log4j dengan betul.log4j: PERINGATAN Lihat http://logging.apache.org/log4j/1.2/faq.html#noconfig untuk maklumat lebih lanjut.Nama domain laman web = demo.guru99.comURL laman web = http://demo.guru99.com/V4/Tajuk halaman = Halaman Utama Bank9999LULUS: Log masuk===============================================Ujian lalaiUjian dijalankan: 1, Kegagalan: 0, Langkau: 0=============================================== 

3) Contoh: Scroll Downusing JavaScriptExecutor.

Laksanakan skrip selenium di bawah. Dalam contoh ini,

  • Lancarkan laman web
  • Tatal ke bawah sebanyak 600 piksel
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas awam JavaSE_Test {@ Ujianlog masuk awam tidak sah (){Pemacu WebDriver = FirefoxDriver baru ();// Membuat objek antara muka JavascriptExecutor dengan Type castingPemacu JavascriptExecutor js = (JavascriptExecutor);// Melancarkan Laman web.driver.get ("http://moneyboats.com/");// Memaksimumkan tetingkapdriver.manage (). window (). maksimalkan ();// Tatal menegak ke bawah sebanyak 600 pikseljs.executeScript ("window.scrollBy (0,600)");}}

Keluaran : Apabila kod di atas dijalankan, ia akan bergulir ke bawah sebanyak 600 piksel (lihat gambar di bawah)

Ringkasan:

JavaScriptExecutor digunakan apabila Selenium Webdriver gagal mengklik elemen apa pun kerana beberapa masalah.

  • JavaScriptExecutor menyediakan dua kaedah "executescript" & "executeAsyncScript" untuk dikendalikan.
  • Melaksanakan JavaScript menggunakan Selenium Webdriver.
  • Diilustrasikan bagaimana mengklik elemen melalui JavaScriptExecutor, jika selenium gagal mengklik elemen kerana beberapa masalah.
  • Menghasilkan tetingkap 'Makluman' menggunakan JavaScriptExecutor.
  • Navigasi ke halaman yang berbeza menggunakan JavaScriptExecutor.
  • Tatal ke bawah tetingkap menggunakan JavaScriptExecutor.
  • URL, judul, dan nama domain yang diambil menggunakan JavaScriptExecutor.