Selenium Driver web Java Contoh Program (Contoh Kode)
Selenium Java Example
Menggunakan Java class “myclass” yang kita buat pada tutorial sebelumnya, mari kita coba membuat skrip WebDriver yang akan:
Langkah 1: mengambil Mercury Beranda tur
Langkah 2: verifikasi judulnya
Langkah 3: cetak hasil perbandingannya
Langkah 4: tutup sebelum mengakhiri seluruh program.
Selenium Kode Contoh WebDriver
Di bawah ini adalah kode WebDriver sebenarnya untuk logika yang disajikan oleh skenario di atas
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; //comment the above line and uncomment below line to use Chrome //import org.openqa.selenium.chrome.ChromeDriver; public class PG1 { public static void main(String[] args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); //comment the above 2 lines and uncomment below 2 lines to use Chrome //System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); //WebDriver driver = new ChromeDriver(); String baseUrl = "http://demo.guru99.com/test/newtours/"; String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = ""; // launch Fire fox and direct it to the Base URL driver.get(baseUrl); // get the actual value of the title actualTitle = driver.getTitle(); /* * compare the actual title of the page with the expected one and print * the result as "Passed" or "Failed" */ if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); } //close Fire fox driver.close(); } }
Catatan: Mulai Firefox 35, Anda perlu menggunakan driver tokek yang dibuat oleh Mozilla untuk menggunakan Driver Web. Selenium 3.0, gecko dan firefox memiliki masalah kompatibilitas dan pengaturannya yang benar bisa menjadi tugas yang berat. Jika kode tidak berfungsi, turunkan ke Firefox versi 47 atau lebih rendah. Alternatifnya, Anda dapat menjalankan skrip Anda di Chrome. Selenium berfungsi langsung di Chrome. Anda hanya perlu mengubah 3 baris kode untuk membuat skrip Anda berfungsi dengan Chrome atau Firefox
Menjelaskan kode
Mengimpor Paket
Untuk memulai, Anda perlu mengimpor dua paket berikut:
- org.openqa.selenium.*– berisi kelas WebDriver yang diperlukan untuk membuat instance browser baru yang dimuat dengan driver tertentu
- org.openqa.selenium.firefox.Firefoxsopir – berisi FirefoxKelas driver diperlukan untuk membuat instance a Firefox-driver khusus ke browser yang dipakai oleh kelas WebDriver
Jika pengujian Anda memerlukan tindakan yang lebih rumit seperti mengakses kelas lain, mengambil tangkapan layar browser, atau memanipulasi file eksternal, Anda pasti perlu mengimpor lebih banyak paket.
Membuat instance objek dan variabel
Biasanya, ini adalah bagaimana objek driver dipakai.
WebDriver driver = new FirefoxDriver();
A FirefoxKelas driver tanpa parameter berarti default Firefox profil akan diluncurkan oleh kami Java program. Standarnya Firefox profil mirip dengan peluncuran Firefox dalam mode aman (tidak ada ekstensi yang dimuat).
Demi kenyamanan, kami menyimpan URL Dasar dan judul yang diharapkan sebagai variabel.
Meluncurkan Sesi Browser
WebDriver Dapatkan() metode ini digunakan untuk meluncurkan sesi browser baru dan mengarahkannya ke URL yang Anda tentukan sebagai parameternya.
driver.get(baseUrl);
Dapatkan Judul Halaman Sebenarnya
Kelas WebDriver memiliki getTitle () metode yang selalu digunakan untuk mendapatkan judul halaman dari halaman yang sedang dimuat.
actualTitle = driver.getTitle();
Bandingkan Nilai yang Diharapkan dan Nilai Aktual
Bagian kode ini hanya menggunakan kode dasar Java struktur if-else untuk membandingkan judul sebenarnya dengan judul yang diharapkan.
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
Mengakhiri Sesi Browser
The "Menutup()Metode ” digunakan untuk menutup jendela browser.
driver.close();
Mengakhiri Seluruh Program
Jika Anda menggunakan perintah ini tanpa menutup semua jendela browser terlebih dahulu, seluruh Java program akan berakhir sambil membiarkan jendela browser terbuka.
System.exit(0);
Menjalankan Tes
Ada dua cara untuk mengeksekusi kode Eclipse ide.
- On Eclipsebilah menu, klik Jalankan> Jalankan.
- Tekan Ctrl + F11 untuk menjalankan seluruh kode.
Jika Anda melakukan semuanya dengan benar, Eclipse akan menampilkan “Tes Lulus!”
Menemukan Elemen GUI
Menemukan elemen di WebDriver dilakukan dengan menggunakan “temukanElemen(Oleh.locator())" metode. Bagian “pencari lokasi” dari kode ini sama dengan pencari lokasi mana pun yang telah dibahas sebelumnya di Selenium IDE bab dari tutorial ini. Faktanya, Anda disarankan untuk mencari elemen GUI menggunakan IDE dan setelah berhasil diidentifikasi, ekspor kode ke WebDriver.
Berikut ini adalah Selenium kode contoh yang menemukan elemen berdasarkan idnya. Facebook digunakan sebagai URL Dasar.
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG2 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String baseUrl = "http://www.facebook.com"; String tagName = ""; driver.get(baseUrl); tagName = driver.findElement(By.id("email")).getTagName(); System.out.println(tagName); driver.close(); System.exit(0); } }
Kami menggunakan dapatkanTagName() metode untuk mengekstrak nama tag dari elemen tertentu yang id-nya adalah “email”. Ketika dijalankan, kode ini seharusnya dapat mengidentifikasi nama tag “input” dengan benar dan akan mencetaknya di Eclipsejendela Konsol.
Ringkasan untuk menemukan elemen
Variasi | Description | Contoh |
---|---|---|
Oleh.namakelas | menemukan elemen berdasarkan nilai atribut "kelas". | findElement(Oleh.className("someClassName")) |
Oleh.cssSelector | menemukan elemen berdasarkan mesin Pemilih CSS yang mendasari driver | temukanElemen(Oleh.cssSelector(“input#email”)) |
Oleh.id | menempatkan elemen berdasarkan nilai atribut “id”-nya |
findElement(Oleh.id("someId")) |
Oleh.linkText | menemukan elemen tautan dengan teks persis yang ditampilkannya |
findElement(Oleh.linkText(“PENDAFTARAN”)) |
Dengan nama | menempatkan elemen berdasarkan nilai atribut "nama". |
findElement(By.name("someName")) |
Oleh.partialLinkText | menemukan elemen yang berisi teks tautan yang diberikan |
findElement(Oleh.partialLinkText(“REG”)) |
Oleh.tagName | menempatkan elemen berdasarkan nama tagnya |
findElement(Oleh.tagName(“div”)) |
Oleh.xpath | menemukan elemen melalui XPath |
findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/ tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”)) |
Catatan tentang Menggunakan findElement(By.cssSelector())
By.cssSelector()
tidak mendukung fitur "berisi". Pertimbangkan Selenium Kode IDE di bawah ini –
In Selenium IDE di atas, seluruh tes lulus. Namun di Selenium Skrip WebDriver di bawah ini, pengujian yang sama menghasilkan kesalahan karena WebDriver tidak mendukung kata kunci “berisi” saat digunakan dalam metode By.cssSelector().
Perintah Umum
Membuat Instansiasi Elemen Web
Daripada menggunakan sintaks “driver.findElement(By.locator())” yang panjang setiap kali Anda mengakses elemen tertentu, kita dapat membuat instance objek WebElement untuk elemen tersebut. Kelas WebElement terdapat dalam paket “org.openqa.selenium.*”.
Mengklik sebuah Elemen
Mengklik mungkin merupakan cara paling umum untuk berinteraksi dengan elemen web. Itu click()
metode ini digunakan untuk mensimulasikan klik pada elemen apa pun. Berikut ini Selenium Java contoh menunjukkan caranya click()
digunakan untuk mengklik Mercury Tombol “Masuk” Tur.
Hal-hal berikut harus diperhatikan saat menggunakan metode click().
- Tidak diperlukan parameter/argumen apa pun.
- Metode ini secara otomatis menunggu halaman baru dimuat jika memungkinkan.
- Elemen yang akan diklik harus terlihat (tinggi dan lebar tidak boleh sama dengan nol).
Dapatkan Perintah
Dapatkan perintah untuk mengambil berbagai informasi penting tentang halaman/elemen. Berikut adalah beberapa perintah “dapatkan” penting yang harus Anda pahami.
Perintah | penggunaan |
---|---|
Dapatkan()
Contoh penggunaan: |
|
getTitle ()
Contoh penggunaan: |
|
dapatkanPageSource()
Contoh penggunaan: |
|
dapatkanUrl Saat Ini()
Contoh penggunaan: |
|
getText ()
Contoh penggunaan: |
|
Navigasi perintah
Perintah ini memungkinkan Anda untuk menyegarkan, masuk, dan beralih antar halaman web yang berbeda.
navigasi ke()
Contoh penggunaan: |
|
navigasi().segarkan()
Contoh penggunaan: |
|
navigasi().kembali()
Contoh penggunaan: |
|
navigasi().maju()
Contoh penggunaan: |
|
Menutup dan Keluar dari Browser Windows
Menutup()
Contoh penggunaan: |
|
berhenti()
Contoh penggunaan: |
|
Untuk menggambarkan dengan jelas perbedaan antara close()
dan quit()
, coba jalankan kode di bawah ini. Ia menggunakan halaman web yang secara otomatis memunculkan jendela saat halaman dimuat dan membuka jendela lain setelah keluar.
Perhatikan bahwa hanya jendela browser induk yang ditutup, bukan dua jendela pop-up.
Namun, jika Anda menggunakan quit(), semua jendela akan ditutup – bukan hanya jendela induknya. Coba jalankan kode di bawah ini dan Anda akan melihat bahwa dua jendela pop-up di atas juga akan ditutup secara otomatis.
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG3 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.popuptest.com/popuptest2.html"); driver.quit(); // using QUIT all windows will close } }
Beralih Antar Bingkai
Untuk mengakses elemen GUI dalam sebuah Frame, pertama-tama kita harus mengarahkan WebDriver untuk fokus pada frame atau jendela pop-up terlebih dahulu sebelum kita dapat mengakses elemen di dalamnya. Mari kita ambil contoh, halaman web http://demo.guru99.com/selenium/deprecated.html
Halaman ini memiliki 3 bingkai yang atribut “namanya” ditunjukkan di atas. Kami ingin mengakses tautan “Tidak berlaku lagi” yang dilingkari di atas dengan warna kuning. Untuk melakukan itu, pertama-tama kita harus menginstruksikan WebDriver untuk beralih ke frame “classFrame” menggunakan “beralih Ke().bingkai()” metode. Kita akan menggunakan atribut nama frame sebagai parameter untuk bagian “frame()”.
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG4 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
Setelah mengeksekusi kode ini, Anda akan melihat bahwa frame “classFrame” dibawa ke halaman “Deprecated API”, artinya kode kita berhasil mengakses link “Deprecated”.
Beralih Antar Pop-up Windows
WebDriver memungkinkan jendela pop-up seperti peringatan untuk ditampilkan, tidak seperti di Selenium IDE. Untuk mengakses elemen dalam peringatan (seperti pesan yang dikandungnya), kita harus menggunakan "switchTo().alert()"
metode. Dalam kode di bawah ini, kita akan menggunakan metode ini untuk mengakses kotak peringatan dan kemudian mengambil pesannya menggunakan "getText()"
metode, dan kemudian secara otomatis menutup kotak peringatan menggunakan "switchTo().alert().accept()"
Metode.
Pertama, pergilah ke https://output.jsbin.com/usidix/1 dan secara manual klik tombol "Mulai!" tombol di sana dan lihat sendiri teks pesannya.
Mari kita lihat Selenium contoh kode untuk melakukan ini-
package mypackage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class myclass { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String alertMessage = ""; driver.get("http://jsbin.com/usidix/1"); driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); } }
pada Eclipse konsol, perhatikan bahwa pesan peringatan yang dicetak adalah:
Menunggu
Ada dua macam menunggu.
- Tunggu implisit – digunakan untuk mengatur waktu tunggu default di seluruh program
- Tunggu eksplisit – digunakan untuk mengatur waktu tunggu untuk instance tertentu saja
Penantian Tersirat
- Lebih mudah untuk membuat kode daripada Penantian Eksplisit.
- Biasanya dideklarasikan di bagian instantiasi kode.
- Anda hanya memerlukan satu paket tambahan untuk diimpor.
Untuk mulai menggunakan penantian implisit, Anda harus mengimpor paket ini ke dalam kode Anda.
Kemudian pada bagian instantiasi kode Anda, tambahkan ini.
Penantian Eksplisit
Penantian eksplisit dilakukan menggunakan kelas WebDriverWait dan ExpectedCondition. Untuk yang berikut ini Selenium Contoh WebDriver, kita harus menunggu hingga 10 detik hingga elemen yang idnya adalah "nama pengguna" terlihat sebelum melanjutkan ke perintah berikutnya. Berikut langkah-langkahnya.
Langkah 1:
Impor dua paket ini:
Langkah 2:
Deklarasikan variabel WebDriverWait. Dalam contoh ini, kita akan menggunakan “myWaitVar” sebagai nama variabel.
Langkah 3:
Gunakan myWaitVar dengan ExpectedConditions pada bagian di mana Anda perlu menunggu secara eksplisit. Dalam hal ini, kami akan menggunakan menunggu eksplisit pada “nama pengguna” (Mercury Tours HomePage) sebelum kita mengetikkan teks “tutorial” ke dalamnya.
Kondisi
Metode berikut digunakan dalam operasi kondisional dan perulangan —
- diaktifkan() digunakan ketika Anda ingin memverifikasi apakah elemen tertentu diaktifkan atau tidak sebelum menjalankan perintah.
- Ditampilkan() digunakan ketika Anda ingin memverifikasi apakah elemen tertentu ditampilkan atau tidak sebelum menjalankan perintah.
- dipilih() digunakan ketika Anda ingin memverifikasi apakah suatu hal tertentu kotak centang, tombol radio, atau opsi dalam kotak drop-down dipilih. Itu tidak berfungsi pada elemen lain.
Menggunakan Kondisi yang Diharapkan
Kelas ExpectedConditions menawarkan serangkaian kondisi yang lebih luas yang dapat Anda gunakan bersama dengan metode Until() WebDriverWait.
Di bawah ini adalah beberapa metode ExpectedConditions yang paling umum.
- peringatanIsPresent() – menunggu hingga kotak peringatan ditampilkan.
- elemenToBeClickable() – Menunggu hingga elemen terlihat dan, pada saat yang sama, diaktifkan. Contoh Selenium Kode di bawah ini akan menunggu hingga elemen dengan id=”nama pengguna” terlihat dan diaktifkan terlebih dahulu sebelum menetapkan elemen tersebut sebagai variabel WebElement bernama “txtUserName”.
- frameToBeAvailableAndSwitchToIt() – Menunggu hingga frame tertentu sudah tersedia, lalu secara otomatis beralih ke frame tersebut.
Menangkap Pengecualian
Saat menggunakan isEnabled(), isDisplayed(), dan isSelected(), WebDriver menganggap bahwa elemen tersebut sudah ada di halaman. Jika tidak, ia akan menampilkan Tidak Ada Pengecualian Elemen Seperti Itu. Untuk menghindari hal ini, sebaiknya kita menggunakan blok try-catch agar program tidak terganggu.
WebElement txtbox_username = driver.findElement(By.id("username")); try{ if(txtbox_username.isEnabled()){ txtbox_username.sendKeys("tutorial"); } } catch(NoSuchElementException nsee){ System.out.println(nsee.toString()); }
Jika Anda menggunakan menunggu eksplisit, jenis pengecualian yang harus Anda tangkap adalah “TimeoutException”.
Kesimpulan
- Untuk mulai menggunakan WebDriver API, Anda harus mengimpor setidaknya dua paket ini.
- org.openqa.selenium.*
- org.openqa.selenium.firefox.Firefoxsopir
-
get()
metode setara dengan Selenium Perintah "buka" IDE. - Menemukan elemen di WebDriver dilakukan dengan menggunakan
findElement()
Metode. - Berikut ini adalah pilihan yang tersedia untuk menemukan elemen di WebDriver:
- Oleh.namakelas
- Oleh.cssSelector
- Oleh.id
- Oleh.linkText
- Dengan nama
- Oleh.partialLinkText
- Oleh.tagName
- Oleh.xpath
- Oleh.cssSelector() tidak mendukung "mengandung" fitur.
- Anda dapat membuat instance elemen menggunakan kelas WebElement.
- Mengklik suatu elemen dilakukan dengan menggunakan
click()
Metode. - WebDriver menyediakan perintah get yang berguna ini:
- Dapatkan()
- getTitle ()
- dapatkanPageSource()
- dapatkanUrl Saat Ini()
- getText ()
- WebDriver menyediakan perintah navigasi yang berguna ini
- navigasi().maju()
- navigasi().kembali()
- navigasi ke()
- navigasi().segarkan()
- Metode close() dan quit() digunakan untuk menutup jendela browser.
Close()
digunakan untuk menutup satu jendela; ketikaquit()
digunakan untuk menutup semua jendela yang terkait dengan jendela induk yang dikontrol oleh objek WebDriver. -
switchTo().frame()
danswitchTo().alert()
metode digunakan untuk mengarahkan fokus WebDriver ke bingkai atau peringatan. Implicit waits
digunakan untuk mengatur waktu tunggu sepanjang program, sementaraexplicit waits
hanya digunakan pada porsi tertentu saja.- Anda dapat menggunakan isEnabled(), isDisplayed(),isSelected(), dan kombinasi keduanya WebDriverTunggu dan Kondisi yang Diharapkan metode saat memverifikasi status suatu elemen. Namun, mereka tidak memverifikasi apakah elemen tersebut tidak ada.
- Ketika isEnabled(), isDisplayed(), atau isSelected() dipanggil saat elemen tidak ada, WebDriver akan memunculkan Tidak Ada Pengecualian Elemen Seperti Itu.
- Ketika metode WebDriverWait dan ExpectedConditions dipanggil saat elemen tidak ada, WebDriver akan memunculkan a
TimeoutException
.
Catatan:
driver.get()
: Metode ini digunakan untuk menavigasi ke situs web tertentu. Namun, metode ini tidak menyimpan riwayat peramban atau kuki. Akibatnya, tombol maju dan mundur tidak akan berfungsi, dan mengekliknya tidak akan menjadwalkan navigasi halaman.
driver.navigate()
: Metode ini juga digunakan untuk menavigasi ke situs web tertentu, tetapi tetap menyimpan riwayat peramban dan kuki. Ini memungkinkan tombol maju dan mundur digunakan untuk navigasi antar halaman saat mengodekan kasus uji.