Skrip Pemacu Web Selenium Pertama: Contoh Kod Contoh JAVA

Isi kandungan:

Anonim

Dengan menggunakan kelas Java "myclass" yang kami buat dalam tutorial sebelumnya, mari kita cuba membuat skrip WebDriver yang akan:

  1. dapatkan laman web Mercury Tours
  2. mengesahkan tajuknya
  3. mencetak hasil perbandingan
  4. tutup sebelum mengakhiri keseluruhan program.

Kod Pemacu Web

Berikut adalah kod WebDriver sebenar untuk logik yang ditunjukkan oleh senario di atas

Catatan: Memulai Firefox 35, anda perlu menggunakan pemacu tokek yang dibuat oleh Mozilla untuk menggunakan Pemacu Web. Selenium 3.0, tokek dan firefox mempunyai masalah keserasian dan menetapkannya dengan betul boleh menjadi tugas yang berat. Sekiranya kod tidak berfungsi, turunkan ke Firefox versi 47 atau yang lebih rendah. Sebagai alternatif, anda boleh menjalankan skrip anda di Chrome. Selenium berfungsi di luar kotak untuk Chrome. Anda hanya perlu menukar 3 baris kod agar skrip anda berfungsi dengan Chrome atau Firefox

pakej projek baru;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// komen baris di atas dan tanggapan di bawah untuk menggunakan Chrome// import org.openqa.selenium.chrome.ChromeDriver;kelas awam PG1 {utama kekosongan statik awam (String [] args) {// pengisytiharan dan penentuan objek / pemboleh ubahSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pemacu WebDriver = FirefoxDriver baru ();// komen 2 baris di atas dan ungkapkan di bawah 2 baris untuk menggunakan Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Pemacu WebDriver = ChromeDriver baru ();String baseUrl = "http://demo.guru99.com/test/newtours/";Rentetan yang diharapkanTitle = "Selamat Datang: Mercury Tours";String sebenarnyaTitle = "";// lancarkan Fire fox dan arahkan ke URL Pangkalandriver.get (baseUrl);// dapatkan nilai sebenar tajuksebenarnyaTitle = driver.getTitle ();/ ** bandingkan tajuk sebenar halaman dengan yang diharapkan dan cetak* hasilnya sebagai "Lulus" atau "Gagal"* /jika (sebenarnyaTitle.contentEquals (dijangkaTitle)) {System.out.println ("Ujian Lulus!");} lain {System.out.println ("Ujian Gagal");}// tutup Fire musangpemandu.tutup ();}}

Menjelaskan kod

Mengimport Pakej

Untuk memulakan, anda perlu mengimport dua pakej berikut:

  1. org.openqa.selenium. * - mengandungi kelas WebDriver yang diperlukan untuk mewujudkan penyemak imbas baru yang dimuatkan dengan pemacu tertentu
  2. org.openqa.selenium.firefox.FirefoxDriver - mengandungi kelas FirefoxDriver yang diperlukan untuk mewujudkan pemacu khusus Firefox ke penyemak imbas yang ditunjukkan oleh kelas WebDriver

Sekiranya ujian anda memerlukan tindakan yang lebih rumit seperti mengakses kelas lain, mengambil tangkapan skrin penyemak imbas, atau memanipulasi fail luaran, pasti anda perlu mengimport lebih banyak pakej.

Membuat objek dan pemboleh ubah

Biasanya, ini adalah bagaimana objek pemacu dibuat.

Kelas FirefoxDriver tanpa parameter bermaksud bahawa profil Firefox lalai akan dilancarkan oleh program Java kami. Profil Firefox lalai adalah serupa dengan melancarkan Firefox dalam mod selamat (tiada sambungan dimuat).

Untuk kemudahan, kami menyimpan URL Pangkalan dan tajuk yang diharapkan sebagai pemboleh ubah.

Melancarkan Sesi Penyemak Imbas

Kaedah get () WebDriver digunakan untuk melancarkan sesi penyemak imbas baru dan mengarahkannya ke URL yang anda tentukan sebagai parameternya.

Dapatkan Tajuk Halaman Sebenar

Kelas WebDriver mempunyai kaedah getTitle () yang selalu digunakan untuk mendapatkan judul halaman dari halaman yang sedang dimuat.

Bandingkan Nilai yang Diharapkan dan Sebenar

Bahagian kod ini hanya menggunakan struktur Java jika-yang lain untuk membandingkan tajuk sebenar dengan yang diharapkan.

Menamatkan Sesi Penyemak Imbas

Kaedah " close () " digunakan untuk menutup tetingkap penyemak imbas.

Menamatkan Keseluruhan Program

Sekiranya anda menggunakan arahan ini tanpa menutup semua tetingkap penyemak imbas terlebih dahulu, keseluruhan program Java anda akan berakhir sambil membiarkan tetingkap penyemak imbas terbuka.

Menjalankan Ujian

Terdapat dua cara untuk melaksanakan kod dalam Eclipse IDE.

  1. Pada bar menu Eclipse, klik Jalankan> Jalankan.
  2. Tekan Ctrl + F11 untuk menjalankan keseluruhan kod.

Sekiranya anda melakukan semuanya dengan betul, Eclipse akan mengeluarkan "Ujian Lulus!"

Mencari Elemen GUI

Mencari elemen dalam WebDriver dilakukan dengan menggunakan kaedah " findElement (By. Locator ()) ". Bahagian "locator" dari kod ini sama dengan mana-mana pencari yang dibincangkan sebelumnya dalam bab-bab Selenium IDE tutorial ini. Sebenarnya, disarankan agar anda mencari elemen GUI menggunakan IDE dan setelah berjaya dikenal pasti mengeksport kod ke WebDriver.

Berikut adalah contoh kod Selenium yang mencari elemen dengan idnya. Facebook digunakan sebagai URL Pangkalan.

pakej projek baru;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;kelas awam PG2 {utama kekosongan statik awam (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pemacu WebDriver = FirefoxDriver baru ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("e-mel")). getTagName ();System.out.println (tagName);pemandu.tutup ();System.exit (0);}}

Kami menggunakan kaedah getTagName () untuk mengekstrak nama tag elemen tertentu yang idnya adalah "e-mel". Semasa dijalankan, kod ini harus dapat mengenal pasti nama tag "input" dengan betul dan akan mencetaknya pada tetingkap Konsol Eclipse.

Ringkasan untuk mencari unsur

Variasi Penerangan Contohnya
Oleh. nama kelas mencari unsur berdasarkan nilai atribut "kelas" findElement (By.className ("someClassName"))
Oleh. cssPemilih mencari elemen berdasarkan enjin CSS Selector yang mendasari pemandu findElement (By.cssSelector ("masukan # e-mel"))
Oleh. ID mengesan unsur berdasarkan nilai atribut "id" mereka findElement (By.id ("someId"))
Oleh. pautanTeks mencari elemen pautan dengan teks yang tepat yang dipaparkannya findElement (By.linkText ("PENDAFTARAN"))
Oleh. nama mengesan unsur dengan nilai atribut "name" findElement (By.name ("someName"))
Oleh. partialLinkText mengesan unsur yang mengandungi teks pautan yang diberikan findElement (Oleh.partialLinkText ("REG"))
Oleh. nama tag mengesan unsur dengan nama tag mereka findElement (By.tagName ("div"))
Oleh. xpath mengesan elemen melalui XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / jadual / tbody / tr [2] / td [3] / borang / jadual / tbody / tr [5] "))

Catatan mengenai Menggunakan findElement (By.cssSelector ())

By.cssSelector () tidak menyokong ciri "mengandung" . Pertimbangkan kod Selenium IDE di bawah -

Di Selenium IDE di atas, keseluruhan ujian lulus. Namun dalam skrip Selenium WebDriver di bawah, ujian yang sama menghasilkan ralat kerana WebDriver tidak menyokong kata kunci "mengandung" ketika digunakan dalam kaedah By.cssSelector ().

Perintah Biasa

Memasukkan Elemen Web

Daripada menggunakan sintaks "driver.findElement (By.locator ())" yang panjang setiap kali anda mengakses elemen tertentu, kami dapat mewujudkan objek WebElement untuknya. Kelas WebElement terdapat dalam pakej "org.openqa.selenium. *".

Mengklik Elemen

Mengklik mungkin cara yang paling biasa untuk berinteraksi dengan elemen web . Kaedah klik () digunakan untuk mensimulasikan klik elemen apa pun. Contoh Selenium Java berikut menunjukkan bagaimana klik () digunakan untuk mengklik butang "Log Masuk" Mercury Tours.

Perkara-perkara berikut mesti diberi perhatian semasa menggunakan kaedah klik ().

  • Ia tidak mengambil parameter / argumen.
  • Kaedah ini secara automatik menunggu halaman baru dimuat jika berlaku.
  • Elemen yang akan diklik, mesti kelihatan (tinggi dan lebar tidak boleh sama dengan sifar).

Dapatkan Perintah

Dapatkan arahan untuk mendapatkan pelbagai maklumat penting mengenai halaman / elemen. Berikut adalah beberapa arahan "get" penting yang mesti anda ketahui.

Perintah Penggunaan
dapatkan () Contoh penggunaan:
  • Secara automatik membuka tetingkap penyemak imbas baru dan mengambil halaman yang anda tentukan di dalam kurungannya.
  • Ini adalah arahan dari arahan "terbuka" Selenium IDE.
  • Parameter mestilah objek String .
getTitle () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Mengambil tajuk halaman semasa
  • Ruang putih yang terkemuka dan tertinggal dipangkas
  • Mengembalikan rentetan nol jika halaman tidak mempunyai tajuk
getPageSource () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Mengembalikan kod sumber halaman sebagai nilai String
getCurrentUrl () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Mengambil rentetan yang mewakili URL semasa yang dilihat oleh penyemak imbas
getText () Contoh penggunaan:
  • Mengambil teks dalaman elemen yang anda tentukan

Arahkan arahan

Perintah ini membolehkan anda memuat semula, masuk dan beralih antara halaman web yang berbeza.

navigasi (). ke () Contoh penggunaan:
  • Secara automatik membuka tetingkap penyemak imbas baru dan mengambil halaman yang anda tentukan di dalam kurungannya.
  • Ia melakukan perkara yang sama seperti kaedah get ().
navigasi (). refresh () Contoh penggunaan:
  • Tidak memerlukan parameter.
  • Ia menyegarkan halaman semasa.
navigasi (). kembali () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Membawa anda kembali satu halaman pada sejarah penyemak imbas.
navigasi (). maju () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Membawa anda maju satu halaman pada sejarah penyemak imbas.

Menutup dan Menutup Windows Penyemak Imbas

tutup () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Ia hanya menutup tetingkap penyemak imbas yang dikendalikan oleh WebDriver pada masa ini .
berhenti () Contoh penggunaan:
  • Tidak memerlukan parameter
  • Ia menutup semua tetingkap yang telah dibuka oleh WebDriver.

Untuk menggambarkan dengan jelas perbezaan antara close () dan quit (), cuba laksanakan kod di bawah. Ia menggunakan laman web yang secara automatik muncul tetingkap semasa memuatkan halaman dan membuka yang lain setelah keluar.

Perhatikan bahawa hanya tetingkap penyemak imbas induk yang ditutup dan bukan dua tetingkap pop timbul.

Tetapi jika anda menggunakan quit (), semua tetingkap akan ditutup - bukan hanya yang induk. Cuba jalankan kod di bawah dan anda akan melihat bahawa kedua-dua pop timbul di atas secara automatik juga akan ditutup.

pakej projek baru;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;kelas awam PG3 {utama kekosongan statik awam (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // menggunakan QUIT semua tetingkap akan ditutup}}

Pertukaran Antara Bingkai

Untuk mengakses elemen GUI dalam Bingkai, pertama-tama kita harus mengarahkan WebDriver untuk fokus pada bingkai atau tetingkap pop timbul terlebih dahulu sebelum kita dapat mengakses elemen di dalamnya. Mari kita ambil, misalnya, laman web http://demo.guru99.com/selenium/deprecated.html

Halaman ini mempunyai 3 bingkai yang atribut "name" ditunjukkan di atas. Kami ingin mengakses pautan "Tidak digunakan lagi" yang dilingkari dengan warna kuning di atas. Untuk melakukan itu, pertama-tama kita harus mengarahkan WebDriver untuk beralih ke bingkai "classFrame" menggunakan kaedah "switchTo (). Frame ()" . Kami akan menggunakan atribut name dari frame sebagai parameter untuk bahagian "frame ()".

pakej projek baru;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;kelas awam PG4 {utama kekosongan statik awam (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pemacu WebDriver = FirefoxDriver baru ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). bingkai ("classFrame");driver.findElement (By.linkText ("Tidak digunakan lagi)). klik ();pemandu.tutup ();}}

Setelah melaksanakan kod ini, anda akan melihat bahawa bingkai "classFrame" dibawa ke halaman "API Tidak Digunakan", yang bermaksud bahawa kod kami berjaya mengakses pautan "Tidak digunakan lagi".

Beralih antara Windows Pop-up

WebDriver membenarkan tetingkap pop timbul seperti amaran ditampilkan, tidak seperti di Selenium IDE. Untuk mengakses elemen dalam amaran (seperti pesan yang terkandung di dalamnya), kita mesti menggunakan kaedah "switchTo (). Alert ()" . Dalam kod di bawah, kami akan menggunakan kaedah ini untuk mengakses kotak amaran dan kemudian mengambil mesejnya menggunakan kaedah "getText ()" , dan kemudian secara automatik menutup kotak amaran menggunakan "switchTo (). Alert (). Accept () " kaedah.

Pertama, pergi ke http://jsbin.com/usidix/1 dan klik "Go!" Secara manual. butang di sana dan lihat sendiri teks mesej.

Mari kita lihat kod contoh Selenium untuk melakukan ini-

pakej mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;myclass kelas awam {utama kekosongan statik awam (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Pemacu 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 (). terima ();System.out.println (alertMessage);driver.quit ();}}

Pada konsol Eclipse, perhatikan bahawa mesej amaran yang dicetak adalah:

Menunggu

Terdapat dua jenis penantian.

  1. Penantian tersirat - digunakan untuk menetapkan masa menunggu lalai sepanjang program
  2. Penantian eksplisit - digunakan untuk menetapkan masa menunggu untuk contoh tertentu sahaja

Tunggu Tersirat

  • Lebih mudah dikodkan daripada Explicit Waits.
  • Biasanya dinyatakan dalam bahagian kod.
  • Anda hanya memerlukan satu pakej tambahan untuk diimport.

Untuk mula menggunakan penantian tersirat, anda perlu mengimport pakej ini ke dalam kod anda.

Kemudian pada bahagian instansi kod anda, tambahkan ini.

Tunggu Eksplisit

Penantian eksplisit dilakukan menggunakan kelas WebDriverWait dan ExpectedCondition . Untuk contoh Selenium WebDriver berikut, kita akan menunggu hingga 10 saat untuk elemen yang idnya "nama pengguna" menjadi kelihatan sebelum meneruskan perintah seterusnya. Inilah langkahnya.

Langkah 1

Import dua pakej ini:

Langkah 2

Menyatakan pemboleh ubah WebDriverWait. Dalam contoh ini, kita akan menggunakan "myWaitVar" sebagai nama pemboleh ubah.

Langkah 3

Gunakan myWaitVar dengan ExpectedConditions pada bahagian di mana anda memerlukan penantian yang jelas. Dalam kes ini, kami akan menggunakan penantian eksplisit pada input "nama pengguna" (Mercury Tours HomePage) sebelum kami memasukkan teks "tutorial" ke atasnya.

Syarat

Kaedah berikut digunakan dalam operasi bersyarat dan gelung -

  • isEnabled () digunakan ketika anda ingin mengesahkan sama ada elemen tertentu diaktifkan atau tidak sebelum melaksanakan perintah.
  • isDisplayed () digunakan ketika anda ingin mengesahkan sama ada elemen tertentu dipaparkan atau tidak sebelum melaksanakan perintah.
  • isSelected () digunakan ketika anda ingin mengesahkan sama ada kotak pilihan, butang radio, atau pilihan dalam kotak drop-down dipilih. Ia tidak berfungsi pada elemen lain.

Menggunakan ExpectedConditions

Kelas ExpectedConditions menawarkan sekumpulan syarat yang lebih luas yang boleh anda gunakan bersama dengan kaedah WebDriverWait's hingga ().

Berikut adalah beberapa kaedah ExpectedConditions yang paling biasa.

  • alertIsPresent () - menunggu sehingga kotak amaran dipaparkan.
  • elementToBeClickable () - Menunggu sehingga elemen kelihatan dan, pada masa yang sama, diaktifkan. Contoh Selenium Code di bawah ini akan menunggu sehingga elemen tersebut dapat dilihat dan diaktifkan terlebih dahulu sebelum menetapkan elemen tersebut sebagai pemboleh ubah WebElement bernama "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Menunggu sehingga bingkai yang diberikan sudah tersedia, dan kemudian secara automatik beralih kepadanya.

Mengecualikan Pengecualian

Semasa menggunakan isEnabled (), isDisplay (), dan isSelected (), WebDriver menganggap bahawa elemen tersebut sudah ada di halaman. Jika tidak, ia akan membuang NoSuchElementException . Untuk mengelakkan ini, kita harus menggunakan blok cubaan agar program tidak terganggu.

WebElement txtbox_username = driver.findElement (By.id ("nama pengguna"));cuba {jika (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}tangkapan (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Sekiranya anda menggunakan penantian eksplisit, jenis pengecualian yang harus anda ketahui adalah "TimeoutException".

Ringkasan

  • Untuk mula menggunakan WebDriver API, anda mesti mengimport sekurang-kurangnya dua pakej ini.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Kaedah get () adalah setara dengan arahan "terbuka" Selenium IDE.
  • Mencari elemen dalam WebDriver dilakukan dengan menggunakan kaedah findElement () .
  • Berikut adalah pilihan yang tersedia untuk mencari elemen dalam WebDriver:
  • Oleh. nama kelas
  • Oleh. cssPemilih
  • Oleh. ID
  • Oleh. pautanTeks
  • Oleh. nama
  • Oleh. partialLinkText
  • Oleh. nama tag
  • Oleh. xpath
  • By.cssSelector () tidak menyokong ciri "mengandung" .
  • Anda boleh mewujudkan elemen menggunakan kelas WebElement .
  • Mengklik pada elemen dilakukan dengan menggunakan kaedah klik () .
  • WebDriver memberikan arahan get berguna ini :
  • dapatkan ()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getTeks ()
  • WebDriver memberikan arahan navigasi berguna ini
  • pandu () ke hadapan ()
  • menavigasi (). kembali ()
  • navigasi () ke ()
  • navigasi (). muat semula ()
  • Kaedah tutup () dan berhenti () digunakan untuk menutup tetingkap penyemak imbas. Tutup () digunakan untuk menutup satu tetingkap; sementara quit () digunakan untuk menutup semua tetingkap yang berkaitan dengan tetingkap induk yang dikendalikan oleh objek WebDriver.
  • Kaedah switchTo (). Frame () dan switchTo (). Alert () digunakan untuk mengarahkan fokus WebDriver ke bingkai atau amaran, masing-masing.
  • Penantian implisit digunakan untuk mengatur waktu menunggu sepanjang program, sementara penantian eksplisit hanya digunakan pada bahagian tertentu.
  • Anda boleh menggunakan kaedah isEnabled (), isDisplayed (), isSelected (), dan gabungan kaedah WebDriverWait dan ExpectedConditions ketika mengesahkan keadaan elemen. Namun, mereka tidak mengesahkan sama ada elemen tersebut tidak wujud.
  • Ketika isEnabled (), isDisplay (), atau isSelected () dipanggil sementara elemen tersebut tidak ada, WebDriver akan membuang NoSuchElementException .
  • Apabila kaedah WebDriverWait dan ExpectedConditions dipanggil semasa elemen tidak ada, WebDriver akan membuang TimeoutException .

Catatan:

driver.get (): Ini digunakan untuk pergi ke laman web tertentu, Tetapi ia tidak mengekalkan Sejarah penyemak imbas dan kuki, jadi kami tidak dapat menggunakan butang maju dan mundur, jika kami mengkliknya, halaman tidak akan mendapat jadual

driver.navigate (): ia digunakan untuk pergi ke laman web tertentu, tetapi menyimpan sejarah penyemak imbas dan kuki, jadi kami dapat menggunakan butang maju dan mundur untuk menavigasi antara halaman semasa pengekodan Testcase