Cara Mengendalikan Panggilan AJAX di Selenium Webdriver

Isi kandungan:

Anonim

Apa itu Ajax?

AJAX bermaksud Asynchronous JavaScript & XML, dan ia membolehkan laman web mengambil sejumlah kecil data dari pelayan tanpa memuatkan keseluruhan halaman.

Ajax adalah teknik yang digunakan untuk membuat laman web yang cepat dan dinamik. Teknik ini tidak segerak dan menggunakan gabungan Javascript dan XML.

Ia akan mengemas kini bahagian laman web tanpa memuatkan keseluruhan halaman.

Beberapa aplikasi terkenal yang menggunakan teknik AJAX adalah Gmail, Peta Google, Facebook, Youtube, dll.

Dalam tutorial ini, anda akan belajar-

  • Apa itu Ajax?
  • Bagaimana Ajax Berfungsi?
  • Cara menangani panggilan Ajax Menggunakan Selenium Webdriver
  • Cabaran dalam Menangani Panggilan Ajax di Selenium Webdriver

Bagaimana Ajax Berfungsi?

Sebagai contoh, apabila anda mengklik butang kirim, JavaScript akan membuat permintaan ke pelayan, menafsirkan hasilnya dan mengemas kini layar saat ini tanpa memuat semula halaman web.

  • Panggilan Ajax adalah permintaan tidak segerak yang dimulakan oleh penyemak imbas yang tidak langsung menghasilkan peralihan halaman. Ini bermaksud, jika anda mengaktifkan permintaan Ajax, pengguna masih dapat mengerjakan aplikasi tersebut sementara permintaan tersebut menunggu respons.
  • AJAX menghantar permintaan HTTP dari klien ke pelayan dan kemudian memproses respons pelayan, tanpa memuatkan keseluruhan halaman. Oleh itu, semasa anda membuat panggilan AJAX, anda tidak pasti mengenai masa yang diambil oleh pelayan untuk menghantar respons kepada anda .

Dari sudut pandang penguji, jika anda memeriksa kandungan atau elemen yang akan ditampilkan, anda perlu menunggu sehingga anda mendapat respons. Semasa panggilan AJAX data disimpan dalam format XML dan diambil dari pelayan.

Cara menangani panggilan Ajax Menggunakan Selenium Webdriver

The cabaran terbesar dalam mengendalikan Ajax panggilan adalah mengetahui masa loading untuk halaman web. Oleh kerana pemuatan laman web hanya akan berlangsung selama beberapa saat, sukar bagi penguji untuk menguji aplikasi tersebut melalui alat automasi. Untuk itu, Selenium Webdriver harus menggunakan kaedah tunggu pada Ajax Call ini.

Jadi dengan melaksanakan perintah tunggu ini, selenium akan menangguhkan pelaksanaan Uji Kes semasa dan menunggu nilai yang diharapkan atau baru. Apabila nilai atau medan baru muncul, kes ujian yang ditangguhkan akan dijalankan oleh Selenium Webdriver.

Berikut adalah kaedah menunggu yang dapat digunakan oleh Selenium Webdriver

  1. Benang. Tidur ()
  • Thread.Sleep () bukanlah pilihan yang bijak kerana menangguhkan thread semasa untuk jangka masa yang ditentukan.
  • Di AJAX, anda tidak akan pasti akan masa menunggu yang tepat. Jadi, ujian anda akan gagal sekiranya elemen tersebut tidak akan muncul dalam masa menunggu. Lebih-lebih lagi, ia meningkatkan overhead kerana memanggil Thread.sleep (t) menjadikan thread semasa untuk dipindahkan dari queue berjalan ke antrian menunggu.
  • Setelah waktu 't' tercapai, utas saat ini akan beralih dari antrian menunggu ke barisan siap, dan kemudian memerlukan beberapa waktu untuk dipilih oleh CPU dan berjalan.
  1. Tunggu Tersirat ()
  • Kaedah ini memberitahu pemacu web untuk menunggu sekiranya elemen tersebut tidak tersedia dengan segera, tetapi penantian ini akan berlaku sepanjang penyemak imbas dibuka. Oleh itu, sebarang carian untuk elemen di halaman memerlukan masa menunggu implisit yang ditetapkan.
  1. Tunggu Eksplisit ()
  • Penantian eksplisit digunakan untuk membekukan pelaksanaan ujian hingga saat syarat tertentu dipenuhi atau waktu maksimum.
  1. WebdriverTunggu
  • Ia boleh digunakan untuk sebarang keadaan. Ini dapat dicapai dengan WebDriverWait dalam kombinasi dengan ExpectedCondition
  • Cara terbaik untuk menunggu elemen secara dinamik adalah memeriksa keadaan setiap saat dan meneruskan perintah seterusnya dalam skrip sebaik sahaja syarat itu dipenuhi.

Tetapi masalah dengan semua penantian ini adalah, anda harus menyebutkan unit time out. Bagaimana jika elemen tersebut masih belum wujud dalam jangka masa tersebut? Jadi ada satu lagi penantian yang disebut Fluent waiting.

  1. Menunggu Fasih
  • Ini adalah pelaksanaan antarmuka Tunggu yang mempunyai waktu tamat dan selang undian. Setiap contoh FluentWait menentukan jumlah masa maksimum untuk menunggu keadaan, serta frekuensi untuk memeriksa keadaan.

Cabaran dalam Menangani Panggilan Ajax di Selenium Webdriver

  • Menggunakan perintah "jeda" untuk menangani panggilan Ajax tidak boleh dipercayai sepenuhnya. Masa jeda yang panjang menjadikan ujian tidak dapat diterima dengan perlahan dan meningkatkan masa Pengujian. Sebaliknya, "waitforcondition" akan lebih membantu dalam menguji aplikasi Ajax.
  • Adalah sukar untuk menilai risiko yang berkaitan dengan aplikasi Ajax tertentu
  • Diberikan kebebasan sepenuhnya kepada pembangun untuk mengubahsuai aplikasi Ajax menjadikan proses pengujiannya mencabar
  • Membuat permintaan ujian automatik mungkin sukar untuk menguji alat kerana aplikasi AJAX sering menggunakan teknik pengekodan atau serialisasi yang berbeza untuk mengirimkan data POST.

Contoh untuk PENGENDALIAN Ajax

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;kelas awam Ajaxdemo {URL String peribadi = "http://demo.guru99.com/test/ajax.html";Pemacu WebDriver;WebDriverWait tunggu;@BeforeClasssetUp kekosongan awam () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// buat contoh krompemacu = ChromeDriver baru ();driver.manage (). window (). maksimalkan ();driver.navigate (). to (URL);}@ Ujianujian kekosongan awam_AjaxContoh () {Mengikut kontena = By.cssSelector (". Container");tunggu = WebDriverWait baru (pemandu, 5);tunggu.until (ExpectedConditions.presenceOfElementLocated (bekas));// Dapatkan teks sebelum melakukan panggilan ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Klik pada butang radiodriver.findElement (By.id ("ya")). klik ();// Klik pada Butang Semakdriver.findElement (By.id ("buttoncheck")). klik ();/ * Dapatkan teks selepas panggilan ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));tunggu.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Sahkan kedua-dua teks sebelum panggilan ajax dan selepas teks panggilan ajax. * /Assert.assertNotEquals (teksSebelumnya, textAfter);System.out.println ("Panggilan Ajax Dilakukan");String waitingText = "Butang radio diperiksa dan nilainya adalah Ya";/ * Sahkan teks yang diharapkan dengan teks yang dikemas kini selepas panggilan ajax * /Assert.assertEquals (teksSelepas, diharapkanTeks);pemandu.tutup ();}}

Ringkasan:

  • AJAX membolehkan laman Web mengambil sejumlah kecil data dari pelayan tanpa memuatkan keseluruhan halaman.
  • Untuk menguji aplikasi Ajax, kaedah menunggu yang berbeza harus digunakan
    • Benang Tidur
    • Tunggu Tersirat
    • Tunggu Eksplisit
    • WebdriverTunggu
    • Menunggu Fasih
  • Membuat permintaan ujian automatik mungkin sukar untuk menguji alat kerana aplikasi AJAX sering menggunakan teknik pengekodan atau serialisasi yang berbeza untuk mengirimkan data POST.