Apa itu Ajax?
AJAX adalah singkatan dari Asynchronous JavaScript & XML, dan ini memungkinkan halaman Web untuk mengambil sejumlah kecil data dari server tanpa memuat ulang seluruh halaman.
Ajax adalah teknik yang digunakan untuk membuat halaman web yang cepat dan dinamis. Teknik ini tidak sinkron dan menggunakan kombinasi Javascript dan XML.
Ini akan memperbarui bagian dari halaman web tanpa memuat ulang seluruh halaman.
Beberapa aplikasi terkenal yang menggunakan teknik AJAX adalah Gmail, Google Maps, Facebook, Youtube, dll.
Dalam tutorial ini, Anda akan belajar-
- Apa itu Ajax?
- Bagaimana Ajax Bekerja?
- Bagaimana menangani panggilan Ajax Menggunakan Selenium Webdriver
- Tantangan dalam Menangani Panggilan Ajax di Selenium Webdriver
Bagaimana Ajax Bekerja?
Misalnya, ketika Anda mengklik tombol kirim, JavaScript akan membuat permintaan ke server, menafsirkan hasil dan memperbarui layar saat ini tanpa memuat ulang halaman web.
- Panggilan Ajax adalah permintaan asinkron yang dimulai oleh browser yang tidak secara langsung menghasilkan transisi halaman. Artinya, jika Anda mengaktifkan permintaan Ajax, pengguna masih dapat bekerja pada aplikasi tersebut sementara permintaan tersebut menunggu tanggapan.
- AJAX mengirimkan permintaan HTTP dari klien ke server dan kemudian memproses respons server, tanpa memuat ulang seluruh halaman. Jadi ketika Anda membuat panggilan AJAX, Anda tidak yakin tentang waktu yang dibutuhkan oleh server untuk mengirimkan tanggapan kepada Anda .
Dari sudut pandang penguji, jika Anda memeriksa konten atau elemen yang akan ditampilkan, Anda harus menunggu hingga Anda mendapatkan respons. Selama panggilan AJAX, data disimpan dalam format XML dan diambil dari server.
Bagaimana menangani panggilan Ajax Menggunakan Selenium Webdriver
The Tantangan terbesar dalam menangani Ajax panggilan mengetahui waktu loading untuk halaman web. Karena pemuatan halaman web hanya akan berlangsung selama sepersekian detik, sulit bagi penguji untuk menguji aplikasi tersebut melalui alat otomatisasi. Untuk itu Selenium Webdriver harus menggunakan metode wait pada Ajax Call ini.
Jadi dengan menjalankan perintah tunggu ini, selenium akan menangguhkan eksekusi Kasus Uji saat ini dan menunggu nilai yang diharapkan atau baru. Saat nilai atau kolom baru muncul, kasus pengujian yang ditangguhkan akan dijalankan oleh Selenium Webdriver.
Berikut adalah metode tunggu yang dapat digunakan Selenium Webdriver
- Thread.Sleep ()
- Thread.Sleep () bukanlah pilihan yang bijaksana karena akan menangguhkan thread saat ini selama jangka waktu tertentu.
- Di AJAX, Anda tidak pernah bisa yakin tentang waktu tunggu yang tepat. Jadi, pengujian Anda akan gagal jika elemen tidak muncul dalam waktu tunggu. Selain itu, ini meningkatkan overhead karena memanggil Thread.sleep (t) membuat utas saat ini dipindahkan dari antrian yang sedang berjalan ke antrian tunggu.
- Setelah waktu 't' tercapai, utas saat ini akan berpindah dari antrian tunggu ke antrian siap, dan kemudian perlu beberapa waktu untuk dipilih oleh CPU dan dijalankan.
- Penantian Tersirat ()
- Metode ini memberi tahu webdriver untuk menunggu jika elemen tidak segera tersedia, tetapi penantian ini akan dilakukan selama browser dibuka. Jadi, penelusuran apa pun untuk elemen di laman bisa memakan waktu menunggu tersirat disetel.
- Penantian Eksplisit ()
- Penantian eksplisit digunakan untuk membekukan eksekusi uji hingga waktu kondisi tertentu terpenuhi atau selang waktu maksimum.
- WebdriverWait
- Ini dapat digunakan untuk kondisi apa pun. Ini dapat dicapai dengan WebDriverWait yang dikombinasikan dengan ExpectedCondition
- Cara terbaik untuk menunggu elemen secara dinamis adalah memeriksa kondisinya setiap detik dan melanjutkan ke perintah berikutnya dalam skrip segera setelah kondisi terpenuhi.
Tetapi masalah dengan semua penantian ini adalah, Anda harus menyebutkan unit waktu habis. Bagaimana jika elemen tersebut masih belum ada dalam waktu tersebut? Jadi ada satu tunggu lagi yang disebut Penantian lancar.
- Penantian Lancar
- Ini adalah implementasi dari antarmuka Tunggu yang memiliki waktu tunggu dan interval pemungutan suara. Setiap instans FluentWait menentukan jumlah waktu maksimum untuk menunggu suatu kondisi, serta frekuensi untuk memeriksa kondisi tersebut.
Tantangan dalam Menangani Panggilan Ajax di Selenium Webdriver
- Menggunakan perintah "pause" untuk menangani panggilan Ajax tidak sepenuhnya dapat diandalkan. Waktu jeda yang lama membuat pengujian menjadi sangat lambat dan meningkatkan waktu Pengujian. Sebaliknya, "waitforcondition" akan lebih membantu dalam menguji aplikasi Ajax.
- Sulit untuk menilai risiko yang terkait dengan aplikasi Ajax tertentu
- Diberikan kebebasan penuh kepada pengembang untuk memodifikasi aplikasi Ajax membuat proses pengujian menjadi menantang
- Membuat permintaan pengujian otomatis mungkin sulit untuk alat pengujian karena aplikasi AJAX seperti itu sering menggunakan teknik pengkodean atau serialisasi yang berbeda untuk mengirimkan data POST.
Contoh Penanganan Ajax
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor 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 publik Ajaxdemo {private String URL = "http://demo.guru99.com/test/ajax.html";Driver WebDriver;WebDriverWait tunggu;@Sebelum kelaspublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// buat instance chromedriver = new ChromeDriver ();driver.manage (). window (). maksimalkan ();driver.navigate (). to (URL);}@Ujipublic void test_AjaxExample () {Dengan container = By.cssSelector (". Container");tunggu = WebDriverWait baru (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Dapatkan teks sebelum melakukan panggilan ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Klik pada tombol radiodriver.findElement (By.id ("yes")). click ();// Klik pada Tombol Periksadriver.findElement (By.id ("buttoncheck")). click ();/ * Dapatkan teks setelah panggilan ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifikasi kedua teks sebelum panggilan ajax dan setelah teks panggilan ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Panggilan Ajax Dilakukan");String expectedText = "Radio button dicentang dan nilainya adalah Yes";/ * Verifikasi teks yang diharapkan dengan teks yang diperbarui setelah panggilan ajax * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}
Ringkasan:
- AJAX memungkinkan halaman Web untuk mengambil sejumlah kecil data dari server tanpa memuat ulang seluruh halaman.
- Untuk menguji aplikasi Ajax, metode menunggu yang berbeda harus diterapkan
- ThreadSleep
- Penantian Tersirat
- Penantian Eksplisit
- WebdriverWait
- Penantian Lancar
- Membuat permintaan pengujian otomatis mungkin sulit untuk alat pengujian karena aplikasi AJAX seperti itu sering menggunakan teknik pengkodean atau serialisasi yang berbeda untuk mengirimkan data POST.