Selenium Webdriver'da AJAX Çağrısının İşlenmesi

İçindekiler:

Anonim

Ajax nedir?

AJAX, Eşzamansız JavaScript ve XML anlamına gelir ve Web sayfasının tüm sayfayı yeniden yüklemeden sunucudan küçük miktarlarda veri almasına izin verir.

Ajax, hızlı ve dinamik web sayfaları oluşturmak için kullanılan bir tekniktir. Bu teknik eşzamansızdır ve Javascript ile XML'in bir kombinasyonunu kullanır.

Tüm sayfayı yeniden yüklemeden bir web sayfasının bölümlerini güncelleyecektir.

AJAX tekniğini kullanan ünlü uygulamalardan bazıları Gmail, Google Maps, Facebook, Youtube vb.

Bu eğitimde öğreneceksiniz-

  • Ajax nedir?
  • Ajax Nasıl Çalışır?
  • Selenium Webdriver kullanarak Ajax araması nasıl yapılır
  • Selenium Webdriver'da Ajax Çağrısını Yönetmede Karşılaşılan Zorluklar

Ajax Nasıl Çalışır?

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

  • Ajax çağrısı, doğrudan bir sayfa geçişiyle sonuçlanmayan, tarayıcı tarafından başlatılan eşzamansız bir istektir. Bunun anlamı, bir Ajax isteğini ateşlerseniz, kullanıcı istek bir yanıt beklerken uygulama üzerinde çalışmaya devam edebilir.
  • AJAX, istemciden sunucuya HTTP istekleri gönderir ve ardından tüm sayfayı yeniden yüklemeden sunucunun yanıtını işler. Dolayısıyla, bir AJAX araması yaptığınızda , sunucunun size bir yanıt göndermek için harcadığı süreden pek emin değilsiniz .

Bir test uzmanının bakış açısından, görüntülenecek içeriği veya öğ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.

Selenium Webdriver kullanarak Ajax araması nasıl yapılır

Ajax arama alınmasında en büyük zorluk web sayfası için yükleme süresi bilmektir. Web sayfasının yüklenmesi sadece birkaç saniye süreceğinden, test edenin bu tür bir uygulamayı otomasyon aracı ile test etmesi zordur. Bunun için Selenium Webdriver'ın bu Ajax Çağrısında bekleme yöntemini kullanması gerekir.

Dolayısıyla, bu bekleme komutunu yürüttüğünde, selenyum mevcut Test Durumunun yürütülmesini askıya alacak ve beklenen veya yeni değeri bekleyecektir. Yeni değer veya alan göründüğünde, askıya alınan test durumları Selenium Webdriver tarafından yürütülür.

Selenium Webdriver'ın kullanabileceği bekleme yöntemleri aşağıdadır

  1. Thread.Sleep ()
  • Thread.Sleep (), geçerli iş parçacığını belirtilen süre boyunca askıya aldığından akıllıca bir seçim değildir.
  • AJAX'ta tam bekleme süresinden asla emin olamazsınız. Bu nedenle, öğe bekleme süresi içinde görünmezse testiniz başarısız olacaktır. Dahası, Thread.sleep (t) çağrılması mevcut iş parçacığının çalışan kuyruktan bekleme kuyruğuna taşınmasını sağladığından ek yükü artırır.
  • 'T' zamanına ulaşıldıktan sonra, mevcut iş parçacığı bekleme kuyruğundan hazır kuyruğa geçecek ve ardından CPU tarafından alınması ve çalışması biraz zaman alacaktır.
  1. Örtülü Bekleme ()
  • Bu yöntem, webdriver'a öğenin hemen kullanılabilir olmaması durumunda beklemesini söyler, ancak bu bekleme tarayıcının açık olduğu süre boyunca yerinde olacaktır. Bu nedenle, sayfadaki öğeler için yapılacak herhangi bir arama, örtük beklemenin ayarlandığı süreyi alabilir.
  1. Açık Bekle ()
  • Açık bekleme, belirli bir koşul karşılanana veya maksimum süre geçene kadar test yürütmesini dondurmak için kullanılır.
  1. WebdriverWait
  • Her koşulda kullanılabilir. Bu, ExpectedCondition ile birlikte WebDriverWait ile elde edilebilir
  • Bir öğeyi dinamik olarak beklemenin en iyi yolu, her saniye koşulu kontrol etmek ve koşul karşılandığında komut dosyasındaki bir sonraki komuta devam etmektir.

Ancak tüm bu beklemelerin sorunu, mola biriminden bahsetmeniz gerektiğidir. Ya öğe zaman içinde hala mevcut değilse? Yani Fluent wait adında bir bekleme daha var.

  1. Akıcı Bekle
  • Bu, zaman aşımına ve yoklama aralığına sahip Bekle arabiriminin bir uygulamasıdır. Her FluentWait örneği, bir koşul için beklenecek maksimum süreyi ve ayrıca koşulu kontrol etme sıklığını belirler.

Selenium Webdriver'da Ajax Çağrısını Yönetmede Karşılaşılan Zorluklar

  • Ajax çağrısını işlemek için "duraklat" komutunu kullanmak tamamen güvenilir değildir. Uzun duraklama süresi, testi kabul edilemez derecede yavaşlatır ve Test süresini uzatır. 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 tanınması, test sürecini zorlaştırır
  • Otomatikleştirilmiş test isteği oluşturmak, test araçları için zor olabilir, çünkü bu tür AJAX uygulaması POST verilerini göndermek için genellikle farklı kodlama veya serileştirme tekniği kullanır.

Ajax TAŞIMA Örneği

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 = "http://demo.guru99.com/test/ajax.html";WebDriver sürücüsü;WebDriverWait bekleyin;@Dersten öncepublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// chrome örneği oluştursürücü = yeni ChromeDriver ();driver.manage (). window (). maximize ();driver.navigate (). to (URL);}@Ölçekpublic void test_AjaxExample () {Konteynere göre = By.cssSelector (". Konteyner");wait = new WebDriverWait (sürücü, 5);wait.until (ExpectedConditions.presenceOfElementLocated (kapsayıcı));// Bir ajax çağrısı yapmadan önce metni alınWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Radyo düğmesine tıklayındriver.findElement (By.id ("yes")) tıklayın ();// Kontrol Düğmesine tıklayındriver.findElement (By.id ("buttoncheck")). tıklayın ();/ * Ajax çağrısından sonra metni al * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Ajax çağrısından önce ve ajax çağrı metninden sonra her iki metni de doğrulayın. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax Çağrısı Gerçekleştirildi");String beklenenText = "Radyo düğmesi işaretlendi ve değeri Evet";/ * Ajax çağrısından sonra güncellenen metinle beklenen metni doğrulayın * /Assert.assertEquals (textAfter, beklenenText);driver.close ();}}

Özet:

  • AJAX, Web sayfasının tüm sayfayı yeniden yüklemeden sunucudan küçük miktarlarda veri almasına izin verir.
  • Ajax uygulamasını test etmek için farklı bekleme yöntemleri uygulanmalıdır.
    • ThreadSleep
    • Örtülü Bekleme
    • Açık Bekle
    • WebdriverWait
    • Akıcı Bekle
  • Otomatikleştirilmiş test isteği oluşturmak, test araçları için zor olabilir, çünkü bu tür AJAX uygulaması POST verilerini göndermek için genellikle farklı kodlama veya serileştirme tekniği kullanır.