Menggunakan kelas Java "myclass" yang kita buat di tutorial sebelumnya, mari kita coba membuat skrip WebDriver yang akan:
- ambil beranda Mercury Tours
- verifikasi judulnya
- mencetak hasil perbandingan
- tutup sebelum mengakhiri seluruh program.
Kode WebDriver
Di bawah ini adalah kode WebDriver sebenarnya untuk logika yang disajikan oleh skenario di atas
Catatan: Memulai Firefox 35, Anda perlu menggunakan driver tokek yang dibuat oleh Mozilla untuk menggunakan Driver Web. Selenium 3.0, tokek, dan firefox memiliki masalah kompatibilitas dan pengaturannya dengan benar bisa menjadi tugas yang berat. Jika kode tidak berfungsi, turunkan versi ke Firefox versi 47 atau lebih rendah. Atau, Anda dapat menjalankan skrip Anda di Chrome. Selenium berfungsi di luar kotak untuk Chrome. Anda hanya perlu mengubah 3 baris kode agar skrip Anda berfungsi dengan Chrome atau Firefox
paket proyek baru;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;// beri komentar baris di atas dan hapus komentar baris di bawah untuk menggunakan Chrome// impor org.openqa.selenium.chrome.ChromeDriver;kelas publik PG1 {public static void main (String [] args) {// deklarasi dan pembuatan instance objek / variabelSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = FirefoxDriver baru ();// beri komentar pada 2 baris di atas dan hapus komentar di bawah 2 baris untuk menggunakan Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Driver WebDriver = new ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Selamat Datang: Mercury Tours";String actualTitle = "";// luncurkan rubah api dan arahkan ke URL Dasardriver.get (baseUrl);// dapatkan nilai sebenarnya dari judulactualTitle = driver.getTitle ();/ ** bandingkan judul halaman yang sebenarnya dengan yang diharapkan dan cetak* hasil sebagai "Lulus" atau "Gagal"* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Tes Berhasil!");} lain {System.out.println ("Tes Gagal");}// tutup rubah apidriver.close ();}}
Menjelaskan kode
Mengimpor Paket
Untuk memulai, Anda perlu mengimpor dua paket berikut:
- org.openqa.selenium. * - berisi kelas WebDriver yang diperlukan untuk membuat browser baru yang dimuat dengan driver tertentu
- org.openqa.selenium.firefox.FirefoxDriver - berisi kelas FirefoxDriver yang diperlukan untuk membuat instance driver khusus Firefox ke browser yang dibuat 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 cara membuat objek driver dibuat.
Kelas FirefoxDriver tanpa parameter berarti bahwa profil Firefox default akan diluncurkan oleh program Java kami. Profil Firefox default mirip dengan meluncurkan Firefox dalam mode aman (tidak ada ekstensi yang dimuat).
Untuk kenyamanan, kami menyimpan URL Dasar dan judul yang diharapkan sebagai variabel.
Meluncurkan Sesi Browser
Metode get () WebDriver digunakan untuk meluncurkan sesi browser baru dan mengarahkannya ke URL yang Anda tentukan sebagai parameternya.
Dapatkan Judul Halaman Aktual
Kelas WebDriver memiliki metode getTitle () yang selalu digunakan untuk mendapatkan judul halaman dari halaman yang dimuat saat ini.
Bandingkan Nilai yang Diharapkan dan Aktual
Bagian kode ini hanya menggunakan struktur if-else Java dasar untuk membandingkan judul sebenarnya dengan yang diharapkan.
Mengakhiri Sesi Browser
Metode " close () " digunakan untuk menutup jendela browser.
Mengakhiri Seluruh Program
Jika Anda menggunakan perintah ini tanpa menutup semua jendela browser terlebih dahulu, seluruh program Java Anda akan berakhir sementara jendela browser tetap terbuka.
Menjalankan Tes
Ada dua cara untuk mengeksekusi kode di Eclipse IDE.
- Di bilah menu Eclipse, klik Jalankan> Jalankan.
- Tekan Ctrl + F11 untuk menjalankan seluruh kode.
Jika Anda melakukan semuanya dengan benar, Eclipse akan menampilkan "Test Passed!"
Menemukan Elemen GUI
Menemukan elemen di WebDriver dilakukan dengan menggunakan metode " findElement (By. Locator ()) ". Bagian "pelacak" dari kode ini sama dengan salah satu pelacak yang sebelumnya dibahas di bab Selenium IDE dari tutorial ini. Sebenarnya, Anda disarankan untuk menemukan elemen GUI menggunakan IDE dan setelah berhasil diidentifikasi, ekspor kode ke WebDriver.
Berikut adalah contoh kode Selenium yang menempatkan elemen dengan id-nya. Facebook digunakan sebagai Base URL.
paket proyek baru;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;kelas publik PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = FirefoxDriver baru ();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 metode getTagName () untuk mengekstrak nama tag dari elemen tertentu yang idnya adalah "email". Saat dijalankan, kode ini harus dapat mengidentifikasi dengan benar nama tag "input" dan akan mencetaknya di jendela Konsol Eclipse.
Ringkasan untuk menemukan elemen
Variasi | Deskripsi | Sampel |
---|---|---|
Oleh. nama kelas | menemukan elemen berdasarkan nilai atribut "class" | findElement (By.className ("someClassName")) |
Oleh. cssSelector | menemukan elemen berdasarkan mesin Pemilih CSS yang mendasari pengemudi | findElement (By.cssSelector ("input # email")) |
Oleh. Indo | menempatkan elemen dengan nilai atribut "id" -nya | findElement (By.id ("someId")) |
Oleh. linkText | menemukan elemen tautan dengan teks persis yang ditampilkannya | findElement (By.linkText ("REGISTRATION")) |
Oleh. nama | menempatkan elemen dengan nilai atribut "nama" | findElement (By.name ("someName")) |
Oleh. partialLinkText | menempatkan elemen yang berisi teks tautan yang diberikan | findElement (By.p PartialLinkText ("REG")) |
Oleh. tagName | menempatkan elemen dengan nama tagnya | findElement (By.tagName ("div")) |
Oleh. xpath | menempatkan 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] / formulir / tabel / tbody / tr [5] ")) |
Catatan tentang Menggunakan findElement (By.cssSelector ())
By.cssSelector () tidak mendukung fitur "berisi" . Pertimbangkan kode IDE Selenium di bawah ini -
Di Selenium IDE di atas, seluruh pengujian berhasil. Namun dalam skrip Selenium WebDriver di bawah ini, pengujian yang sama menghasilkan kesalahan karena WebDriver tidak mendukung kata kunci "berisi" saat digunakan dalam metode By.cssSelector ().
Perintah Umum
Contoh Elemen Web
Alih-alih menggunakan sintaks panjang "driver.findElement (By.locator ())" setiap kali Anda akan mengakses elemen tertentu, kita dapat membuat instance objek WebElement untuknya. Kelas WebElement terdapat dalam paket "org.openqa.selenium. *".
Mengklik pada sebuah Elemen
Mengklik mungkin adalah cara paling umum untuk berinteraksi dengan elemen web . Metode click () digunakan untuk mensimulasikan mengklik elemen apa pun. Contoh Selenium Java berikut menunjukkan bagaimana click () digunakan untuk mengklik tombol "Sign-In" Mercury Tours.
Hal-hal berikut harus diperhatikan saat menggunakan metode click ().
- Tidak mengambil parameter / argumen apa pun.
- Metode ini secara otomatis menunggu halaman baru dimuat jika berlaku.
- Elemen yang akan diklik, harus terlihat (tinggi dan lebar tidak boleh sama dengan nol).
Dapatkan Perintah
Dapatkan perintah mengambil berbagai informasi penting tentang halaman / elemen. Berikut adalah beberapa perintah "get" penting yang harus Anda ketahui.
Perintah | Pemakaian |
---|---|
get () Contoh penggunaan: |
|
getTitle () Contoh penggunaan: |
|
getPageSource () Contoh penggunaan: |
|
getCurrentUrl () Contoh penggunaan: |
|
getText () Contoh penggunaan: |
|
Menavigasi perintah
Perintah ini memungkinkan Anda menyegarkan, masuk, dan beralih antara halaman web yang berbeda.
navigasikan (). to () Contoh penggunaan: |
|
navigasikan (). refresh () Contoh penggunaan: |
|
navigasikan (). back () Contoh penggunaan: |
|
navigasikan (). forward () Contoh penggunaan: |
|
Menutup dan Keluar dari Windows Browser
close () Contoh penggunaan: |
|
berhenti () Contoh penggunaan: |
|
Untuk mengilustrasikan dengan jelas perbedaan antara close () dan exit (), coba jalankan kode di bawah ini. Ini menggunakan halaman web yang secara otomatis memunculkan jendela setelah pemuatan halaman dan membuka yang lain setelah keluar.
Perhatikan bahwa hanya jendela browser induk yang ditutup dan bukan dua jendela pop-up.
Tetapi jika Anda menggunakan berhenti (), semua jendela akan ditutup - bukan hanya jendela induk. Coba jalankan kode di bawah ini dan Anda akan melihat bahwa dua pop-up di atas juga akan ditutup secara otomatis.
paket proyek baru;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;kelas publik PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = FirefoxDriver baru ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // menggunakan QUIT semua jendela akan ditutup}}
Beralih Antar Bingkai
Untuk mengakses elemen GUI dalam 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, misalnya, halaman web http://demo.guru99.com/selenium/deprecated.html
Halaman ini memiliki 3 frame yang atribut "name" -nya ditunjukkan di atas. Kami ingin mengakses tautan "Deprecated" yang dilingkari kuning di atas. Untuk melakukan itu, pertama-tama kita harus menginstruksikan WebDriver untuk beralih ke frame "classFrame" menggunakan metode "switchTo (). Frame ()" . Kita akan menggunakan atribut name dari frame sebagai parameter untuk bagian "frame ()".
paket proyek baru;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;kelas publik PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Deprecated")). click ();driver.close ();}}
Setelah menjalankan kode ini, Anda akan melihat bahwa frame "classFrame" dibawa ke halaman "Deprecated API", artinya kode kami berhasil mengakses link "Deprecated".
Beralih Antara Jendela Pop-up
WebDriver memungkinkan jendela pop-up seperti peringatan untuk ditampilkan, tidak seperti di Selenium IDE. Untuk mengakses elemen dalam alert (seperti pesan yang dikandungnya), kita harus menggunakan metode "switchTo (). Alert ()" . Pada kode di bawah ini, kita akan menggunakan metode ini untuk mengakses kotak peringatan dan kemudian mengambil pesannya menggunakan metode "getText ()" , dan kemudian secara otomatis menutup kotak peringatan menggunakan "switchTo (). Alert (). Accept () " metode.
Pertama, kunjungi http://jsbin.com/usidix/1 dan secara manual klik "Go!" tombol di sana dan lihat sendiri teks pesannya.
Mari kita lihat kode contoh Selenium untuk melakukan ini-
paket mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;kelas publik myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = FirefoxDriver baru ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). klik ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}
Di konsol Eclipse, perhatikan bahwa pesan peringatan yang dicetak adalah:
Menunggu
Ada dua jenis penantian.
- Penantian implisit - digunakan untuk menyetel waktu tunggu default di seluruh program
- Penantian eksplisit - digunakan untuk menyetel waktu tunggu untuk contoh tertentu saja
Penantian Tersirat
- Ini lebih sederhana untuk membuat kode daripada Explicit Waits.
- Ini biasanya dideklarasikan di bagian instantiation pada kode.
- Anda hanya perlu satu paket tambahan untuk diimpor.
Untuk mulai menggunakan menunggu implisit, Anda harus mengimpor paket ini ke dalam kode Anda.
Kemudian pada bagian instantiation kode Anda, tambahkan ini.
Penantian Eksplisit
Penantian eksplisit dilakukan menggunakan kelas WebDriverWait dan ExpectedCondition . Untuk contoh Selenium WebDriver berikut, kita harus menunggu hingga 10 detik agar elemen dengan id "username" menjadi terlihat sebelum melanjutkan ke perintah berikutnya. Berikut langkah-langkahnya.
Langkah 1
Impor dua paket ini:
Langkah 2
Deklarasikan variabel WebDriverWait. Dalam contoh ini, kami akan menggunakan "myWaitVar" sebagai nama variabel.
LANGKAH 3
Gunakan myWaitVar dengan ExpectedConditions pada bagian di mana Anda perlu menunggu secara eksplisit untuk terjadi. Dalam kasus ini, kita akan menggunakan penantian eksplisit pada input "nama pengguna" (Mercury Tours HomePage) sebelum kita mengetik teks "tutorial" ke dalamnya.
Kondisi
Metode berikut digunakan dalam operasi bersyarat dan perulangan -
- isEnabled () digunakan saat Anda ingin memverifikasi apakah elemen tertentu diaktifkan atau tidak sebelum menjalankan perintah.
- isDisplayed () digunakan saat Anda ingin memverifikasi apakah elemen tertentu ditampilkan atau tidak sebelum menjalankan perintah.
- isSelected () digunakan saat Anda ingin memverifikasi apakah kotak centang, tombol radio, atau opsi tertentu di kotak turun bawah dipilih. Itu tidak bekerja pada elemen lain.
Menggunakan ExpectedConditions
Kelas ExpectedConditions menawarkan sekumpulan kondisi yang lebih luas yang bisa Anda gunakan bersama dengan metode sampai () WebDriverWait.
Di bawah ini adalah beberapa metode ExpectedConditions yang paling umum.
- alertIsPresent () - menunggu sampai kotak peringatan ditampilkan.
- elementToBeClickable () - Menunggu hingga elemen terlihat dan, pada saat yang sama, diaktifkan. Contoh Kode Selenium di bawah ini akan menunggu hingga elemen dengan menjadi terlihat dan diaktifkan terlebih dahulu sebelum menetapkan elemen tersebut sebagai variabel WebElement bernama "txtUserName".
- frameToBeAvailableAndSwitchToIt () - Menunggu hingga frame yang diberikan sudah tersedia, lalu secara otomatis beralih ke frame tersebut.
Pengecualian Penangkapan
Saat menggunakan isEnabled (), isDisplayed (), dan isSelected (), WebDriver mengasumsikan bahwa elemen tersebut sudah ada di halaman. Jika tidak, ini akan memunculkan NoSuchElementException . Untuk menghindari hal ini, kita harus menggunakan blok try-catch agar program tidak terputus.
WebElement txtbox_username = driver.findElement (By.id ("nama pengguna"));mencoba{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".
Ringkasan
- Untuk mulai menggunakan WebDriver API, Anda harus mengimpor setidaknya dua paket ini.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metode get () sama dengan perintah "open" Selenium IDE.
- Menemukan elemen di WebDriver dilakukan dengan menggunakan metode findElement () .
- Berikut ini adalah opsi yang tersedia untuk menemukan elemen di WebDriver:
- Oleh. nama kelas
- Oleh. cssSelector
- Oleh. Indo
- Oleh. linkText
- Oleh. nama
- Oleh. partialLinkText
- Oleh. tagName
- Oleh. xpath
- The By.cssSelector () tidak mendukung fitur "berisi" .
- Anda dapat membuat instance elemen menggunakan kelas WebElement .
- Mengklik sebuah elemen dilakukan dengan menggunakan metode click () .
- WebDriver menyediakan perintah get yang berguna ini :
- Dapatkan()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver menyediakan perintah navigasi yang berguna ini
- navigasi (). maju ()
- navigasi (). kembali ()
- navigasi ke()
- navigasi (). refresh ()
- Metode close () dan berhenti () digunakan untuk menutup jendela browser. Close () digunakan untuk menutup satu jendela; sementara berhenti () digunakan untuk menutup semua jendela yang terkait dengan jendela induk yang dikendalikan oleh objek WebDriver.
- Metode switchTo (). Frame () dan switchTo (). Alert () masing -masing digunakan untuk mengarahkan fokus WebDriver ke bingkai atau peringatan.
- Penantian implisit digunakan untuk menyetel waktu tunggu di seluruh program, sementara waktu tunggu eksplisit hanya digunakan pada bagian tertentu.
- Anda dapat menggunakan metode isEnabled (), isDisplayed (), isSelected (), dan kombinasi metode WebDriverWait dan ExpectedConditions saat memverifikasi status elemen. Namun, mereka tidak memverifikasi jika elemen tersebut tidak ada.
- Saat isEnabled (), isDisplayed (), atau isSelected () dipanggil saat elemen tidak ada, WebDriver akan menampilkan NoSuchElementException .
- Jika metode WebDriverWait dan ExpectedConditions dipanggil saat elemen tidak ada, WebDriver akan menampilkan TimeoutException .
catatan:
driver.get (): Ini digunakan untuk pergi ke situs web tertentu, tetapi tidak menyimpan History browser dan cookie jadi, kami tidak dapat menggunakan tombol maju dan mundur, jika kami mengklik itu, halaman tidak akan mendapatkan jadwal
driver.navigate (): ini digunakan untuk pergi ke situs web tertentu, tetapi mempertahankan riwayat browser dan cookie, sehingga kami dapat menggunakan tombol maju dan mundur untuk menavigasi antar halaman selama pengkodean Testcase