Cara Menangani Panggilan AJAX di Selenium Driver web
Apa itu Ajax?
AJAX adalah singkatan dari Asinkron JavaSkrip & XML, dan memungkinkan halaman Web 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 bersifat asinkron dan menggunakan kombinasi Javascript dan XML. Ini akan memperbarui bagian/bagian halaman web tanpa memuat ulang seluruh halaman. Beberapa aplikasi terkenal yang menggunakan teknik AJAX adalah Gmail, Google Maps, Facebook, Youtube, dll.
Bagaimana Ajax Bekerja?
Misalnya, ketika Anda mengklik tombol kirim, JavaNaskah akan membuat permintaan ke server, menafsirkan hasilnya dan memperbarui layar saat ini tanpa memuat ulang halaman web.
- Panggilan Ajax adalah permintaan asinkron yang dimulai oleh browser yang tidak secara langsung mengakibatkan transisi halaman. Artinya, jika Anda menjalankan permintaan Ajax, pengguna masih dapat bekerja pada aplikasi tersebut sementara permintaan tersebut menunggu respons.
- AJAX mengirimkan permintaan HTTP dari klien ke server dan kemudian memproses respons server, tanpa memuat ulang seluruh halaman. Jadi ketika Anda melakukan panggilan AJAX, Anda tidak begitu yakin tentang waktu yang dibutuhkan server untuk mengirimi Anda respons.
Dari sudut pandang penguji, jika Anda memeriksa konten atau elemen yang akan ditampilkan, Anda harus menunggu hingga mendapat respons. Selama panggilan AJAX, data disimpan dalam format XML dan diambil dari server.
Cara Menangani Panggilan Ajax di Selenium Driver web
Tantangan terbesar dalam menangani panggilan Ajax adalah mengetahui waktu pemuatan halaman web. Karena pemuatan halaman web hanya berlangsung sepersekian detik, sulit bagi penguji untuk menguji aplikasi tersebut melalui alat otomatisasi. Untuk itu, Selenium Webdriver harus menggunakan metode tunggu pada Panggilan Ajax ini.
Jadi dengan menjalankan perintah tunggu ini, Selenium akan menghentikan sementara eksekusi saat ini Uji Kasus dan tunggu nilai yang diharapkan atau baru. Ketika nilai atau bidang baru muncul, kasus uji yang ditangguhkan akan dieksekusi Selenium driver web.
Berikut ini adalah metode menunggu yang Selenium Webdriver dapat menggunakan
Thread.Tidur()
- Thread.Sleep() bukanlah pilihan yang bijak karena akan menangguhkan thread saat ini untuk jangka waktu yang ditentukan.
- Di AJAX, Anda tidak pernah bisa memastikan waktu tunggu yang tepat. Jadi, pengujian Anda akan gagal jika elemen tidak muncul dalam waktu tunggu. Selain itu, hal ini meningkatkan overhead karena pemanggilan Thread.sleep(t) membuat thread saat ini dipindahkan dari antrian yang sedang berjalan ke antrian yang menunggu.
- Setelah waktu 't' tercapai, thread saat ini akan berpindah dari antrian tunggu ke antrian siap, dan kemudian memerlukan beberapa waktu untuk diambil oleh CPU dan dapat dijalankan.
Tunggu Implisit()
- Metode ini memberitahu webdriver untuk menunggu jika elemen tidak segera tersedia, namun penantian ini akan berlangsung sepanjang waktu browser terbuka. Jadi, penelusuran apa pun untuk elemen di laman dapat memakan waktu tunggu implisit yang ditetapkan.
Tunggu Eksplisit()
- Tunggu secara eksplisit digunakan untuk membekukan eksekusi pengujian hingga kondisi tertentu terpenuhi atau waktu maksimum berlalu.
WebdriverTunggu
- Dapat digunakan untuk kondisi apa pun. Hal ini dapat dicapai dengan WebDriverWait yang dikombinasikan dengan ExpectedCondition
- Cara terbaik untuk menunggu elemen secara dinamis adalah dengan memeriksa kondisi setiap detik dan melanjutkan ke perintah berikutnya dalam skrip segera setelah kondisi terpenuhi.
Namun masalah dengan semua penantian ini adalah, Anda harus menyebutkan unit waktu habisnya. Bagaimana jika elemen tersebut masih belum hadir dalam waktu tersebut? Jadi ada satu lagi penantian yang disebut Fluent wait.
Penantian Lancar
- Ini adalah implementasi dari antarmuka Tunggu yang memiliki batas waktu dan interval pemungutan suara. Setiap instance FluentWait menentukan jumlah waktu maksimum untuk menunggu suatu kondisi, serta frekuensi untuk memeriksa kondisi tersebut.
Tantangan dalam Menangani Panggilan Ajax Selenium Driver web
- Menggunakan perintah “pause” untuk menangani panggilan Ajax tidak sepenuhnya dapat diandalkan. Waktu jeda yang lama membuat pengujian menjadi sangat lambat dan meningkatkan pengujian waktu. Sebaliknya, “waitforcondition” akan lebih membantu dalam menguji aplikasi Ajax.
- Sulit untuk menilai risiko yang terkait dengan aplikasi Ajax tertentu
- Memberikan 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 sering menggunakan teknik pengkodean atau serialisasi yang berbeda untuk mengirimkan data POST.
Contoh Kode untuk PENANGANAN Ajax menggunakan Selenium Driver web
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; public class Ajaxdemo { private String URL = "https://demo.guru99.com/test/ajax.html"; WebDriver driver; WebDriverWait wait; @BeforeClass public void setUp() { System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); //create chrome instance driver = new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to(URL); } @Test public void test_AjaxExample() { By container = By.cssSelector(".container"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(container)); //Get the text before performing an ajax call WebElement noTextElement = driver.findElement(By.className("radiobutton")); String textBefore = noTextElement.getText().trim(); //Click on the radio button driver.findElement(By.id("yes")).click(); //Click on Check Button driver.findElement(By.id("buttoncheck")).click(); /*Get the text after ajax call*/ WebElement TextElement = driver.findElement(By.className("radiobutton")); wait.until(ExpectedConditions.visibilityOf(TextElement)); String textAfter = TextElement.getText().trim(); /*Verify both texts before ajax call and after ajax call text.*/ Assert.assertNotEquals(textBefore, textAfter); System.out.println("Ajax Call Performed"); String expectedText = "Radio button is checked and it's value is Yes"; /*Verify expected text with text updated after ajax call*/ Assert.assertEquals(textAfter, expectedText); driver.close(); } }
Ringkasan
- AJAX memungkinkan halaman Web mengambil sejumlah kecil data dari server tanpa memuat ulang seluruh halaman.
- Untuk menguji aplikasi Ajax, metode tunggu yang berbeda harus diterapkan
- ThreadTidur
- Penantian Tersirat
- Penantian Eksplisit
- WebdriverTunggu
- Penantian Lancar
- Membuat permintaan pengujian otomatis mungkin sulit untuk alat pengujian karena aplikasi AJAX sering menggunakan teknik pengkodean atau serialisasi yang berbeda untuk mengirimkan data POST.