AJAX Çağrıları Nasıl Yönetilir? Selenium Web sürücüsü

Ajax nedir?

AJAX'ın açılımı eşzamanlı olmayan JavaKomut dosyası ve XML, ve Web sayfasının, tüm sayfayı yeniden yüklemeden sunucudan küçük miktarlarda veri almasına olanak tanır.

Ajax, hızlı ve dinamik web sayfaları oluşturmak için kullanılan bir tekniktir. Bu teknik asenkrondur ve bir kombinasyon kullanır Javascript ve XML. Tüm sayfayı yeniden yüklemeden bir web sayfasının bölümlerini günceller. AJAX tekniğini kullanan bazı ünlü uygulamalar Gmail, Google Maps, Facebook, Youtube vb.'dir.

Ajax Nasıl Çalışır?

Örneğin, gönder düğmesine tıkladığınızda, JavaSenaryo web sayfasını yeniden yüklemeden sunucuya bir istekte bulunacak, sonucu yorumlayacak ve mevcut ekranı güncelleyecektir.

Ajax Nasıl Çalışır?

  • Bir Ajax çağrısı, tarayıcı tarafından başlatılan ve doğrudan bir sayfa geçişiyle sonuçlanmayan eşzamansız bir istektir. Bu, bir Ajax isteği başlatırsanız, istek bir yanıt beklerken kullanıcının uygulama üzerinde çalışmaya devam edebileceği anlamına gelir.
  • AJAX, istemciden sunucuya HTTP istekleri gönderir ve ardından tüm sayfayı yeniden yüklemeden sunucunun yanıtını işler. Yani bir AJAX araması yaptığınızda, Sunucunun size yanıt göndermesi için geçen süre hakkında tam olarak emin değilsiniz.

Testçinin bakış açısından, eğer içeriği veya görüntülenecek öğeyi kontrol ediyorsanız, yanıtı alana kadar beklemeniz gerekir. AJAX çağrısı sırasında veriler XML formatında saklanır ve sunucudan alınır.

Ajax Aramalarını Nasıl Ele Alırsınız? Selenium Web sürücüsü

The Ajax çağrılarını yönetirken karşılaşılan en büyük zorluk, web sayfasının yükleme süresini bilmektir. Web sayfasının yüklenmesi yalnızca birkaç saniye süreceğinden, test uzmanının bu tür bir uygulamayı otomasyon aracı aracılığıyla test etmesi zordur. Bunun için, Selenium Web sürücüsünün bu Ajax Çağrısında bekleme yöntemini kullanması gerekir.

Yani bu bekleme komutunu çalıştırarak Selenyum mevcut komutun yürütülmesini askıya alacaktır. Test Durumu ve beklenen veya yeni değeri bekleyin. Yeni değer veya alan göründüğünde, askıya alınan test senaryoları şu şekilde yürütülür: Selenium Web sürücüsü.

Aşağıda bekleme yöntemleri yer almaktadır: Selenium Web sürücüsünün kullanabileceği

Thread.Sleep()

  • Thread.Sleep(), geçerli iş parçacığını belirtilen süre boyunca askıya aldığı için akıllıca bir seçim değildir.
  • AJAX'ta bekleme süresinden asla emin olamazsınız. Dolayısıyla, öğe bekleme süresi içinde görünmezse testiniz başarısız olur. Üstelik, Thread.sleep(t) çağrısı geçerli iş parçacığının çalışan kuyruktan bekleme kuyruğuna taşınmasına neden olduğundan yükü artırır.
  • 't' süresine ulaşıldığında, geçerli iş parçacığı bekleme kuyruğundan hazır kuyruğuna geçecektir ve daha sonra CPU tarafından seçilip çalıştırılması biraz zaman alır.

Örtülü Bekleme()

  • Bu yöntem, web sürücüsüne, öğe hemen kullanılamıyorsa beklemesini söyler, ancak bu bekleme, tarayıcının açık olduğu süre boyunca geçerli olacaktır. Dolayısıyla sayfadaki öğelere yönelik herhangi bir arama, örtülü beklemenin ayarlandığı süreyi alabilir.

Açık Bekleme()

  • Açık bekleme Belirli bir koşul karşılanana veya maksimum süre dolana kadar testin yürütülmesini dondurmak için kullanılır.

Web sürücüsüBekle

  • Her türlü koşulda kullanılabilir. Bu, ExpectedCondition ile birlikte WebDriverWait ile gerçekleştirilebilir.
  • Bir öğeyi dinamik olarak beklemenin en iyi yolu, koşulu her saniye kontrol etmek ve koşul karşılanır karşılanmaz koddaki bir sonraki komuta devam etmektir.

Ancak tüm bu beklemelerdeki sorun şu ki, mola biriminden bahsetmek zorundasınız. Peki ya öğe bu süre içinde hâlâ mevcut değilse? Yani Akıcı bekleme adı verilen bir bekleme daha var.

akıcı bekle

  • Bu, zaman aşımı ve yoklama aralığına sahip olan Bekleme arayüzünün bir uygulamasıdır. Her FluentWait örneği, bir koşulun bekleneceği maksimum sürenin yanı sıra koşulun kontrol edileceği sıklığı da belirler.

Ajax Çağrısını Yönetmede Zorluklar Selenium Web sürücüsü

  • Ajax çağrısını yönetmek için "pause" komutunu kullanmak tamamen güvenilir değildir. Uzun duraklama süresi testi kabul edilemeyecek kadar yavaşlatır ve test süresini artırır. Test yapmak zaman. Bunun yerine "waitforcondition", Ajax uygulamalarının test edilmesinde daha yararlı olacaktır.
  • Belirli Ajax uygulamalarıyla ilişkili riski değerlendirmek zordur
  • Geliştiricilere Ajax uygulamasını değiştirme konusunda tam özgürlük verilmesi, test sürecini zorlaştırıyor
  • AJAX uygulamaları POST verilerini göndermek için sıklıkla farklı kodlama veya serileştirme teknikleri kullandığından, otomatik test isteği oluşturmak test araçları için zor olabilir.

Ajax HANDLING kullanımı için Kod Örneği Selenium Web sürücüsü

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();
	}
	
}

ÖZET

  • AJAX, Web sayfasının, tüm sayfayı yeniden yüklemeden sunucudan küçük miktarlarda veri almasına olanak tanır.
  • Ajax uygulamasını test etmek için farklı bekleme yöntemleri uygulanmalıdır.
    • KonuUyku
    • örtük bekle
    • Açık Bekleyin
    • Web sürücüsüBekle
    • akıcı bekle
  • AJAX uygulamaları POST verilerini göndermek için sıklıkla farklı kodlama veya serileştirme teknikleri kullandığından, otomatik test isteği oluşturmak test araçları için zor olabilir.