AJAX Çağrıları Nasıl Yönetilir? Selenium Web sürücüsü
⚡ Akıllı Özet
AJAX çağrıları, sayfayı yeniden yüklemeden sayfanın bir bölümünü günceller, bu nedenle Selenium WebDriver, yeni içeriğin var olduğunu varsaymak yerine, içeriğin eklenmesini beklemelidir ve bekleme stratejisi, testin güvenilir bir şekilde geçip geçmeyeceğine karar verir.
AJAX nedir?
AJAX, Asenkron anlamına gelir JavaKomut dosyası ve XML kullanır ve web sayfasının tüm sayfayı yeniden yüklemeden sunucudan az miktarda veri almasına olanak tanır.
AJAX, hızlı ve dinamik web sayfaları oluşturmak için kullanılan bir tekniktir. Asenkron bir yapıya sahiptir ve çeşitli özellikleri bir araya getirir. JavaSenaryo Veri formatını kullanarak sayfanın tamamını değil, yalnızca belirli bölümlerini günceller. Gmail, Google Haritalar, Facebook ve YouTube Hepsi kullanıyor.
AJAX nasıl çalışır?
Örneğin, bir gönder düğmesine tıkladığınızda, JavaKomut dosyası sunucuya bir istek gönderir, sonucu yorumlar ve sayfayı yeniden yüklemeden mevcut ekranı günceller. Aşağıdaki diyagram bu alışverişi göstermektedir.
- AJAX çağrısı, sayfa geçişine neden olmayan, tarayıcıdan gelen eşzamansız bir istektir. Kullanıcı, istek yanıt beklerken uygulamada çalışmaya devam edebilir.
- AJAX, sunucuya HTTP istekleri gönderir ve sayfayı yeniden yüklemeden yanıtı işler; bu nedenle sunucunun ne kadar sürede yanıt vereceğini tahmin edemezsiniz.
Bir test uzmanının bakış açısından, içeriği veya bir öğeyi kontrol etmek, yanıt gelene kadar beklemek anlamına gelir. Adından da anlaşılacağı gibi, yük başlangıçta XML idi; çoğu API artık JSON döndürüyor.
AJAX Çağrıları Nasıl Yönetilir? Selenium Web Sürücüsü
AJAX çağrılarını yönetmenin en büyük zorluğu yükleme süresini bilmektir. Güncelleme saniyenin çok küçük bir bölümü kadar sürdüğü için, uygulamayı otomasyon aracıyla test etmek zordur, bu nedenle Selenium WebDriver, çağrıya bir bekleme yöntemi uygulamalıdır.
Bu bekleme komutunu yürütmek mevcut işlemi askıya alır. Test Durumu Beklenen veya yeni değer görünene kadar; Selenium WebDriver daha sonra askıya alınan adımlara devam eder.
Aşağıda bekleme yöntemleri yer almaktadır: Selenium WebDriver kullanabilir
Konu.uyku()
- Thread.sleep() yöntemi, belirtilen süre boyunca mevcut iş parçacığını askıya aldığı için akıllıca bir seçim değildir.
- AJAX'ta bekleme süresinin tam olarak ne kadar olacağından asla emin olamazsınız, bu nedenle öğe bekleme süresi içinde görünmezse test başarısız olur. Ayrıca, Thread.sleep(t) mevcut iş parçacığını çalışan kuyruktan bekleme kuyruğuna taşıdığı için ek yük de getirir.
- 't' süresi geçtikten sonra iş parçacığı hazır kuyruğuna geçer ve ardından CPU tarafından alınmayı tekrar bekler.
Not: the Java yöntem Konu.uyku() Küçük harflerle; büyük harfle yazılmış hali derlenmiyor.
Örtülü Bekleme()
- Bu yöntem, WebDriver'a bir öğe hemen kullanılamadığında beklemesini söyler ve bu ayar tüm tarayıcı oturumu boyunca geçerli kalır. Bu nedenle, her öğe araması, örtülü beklemenin izin verdiği kadar uzun sürebilir.
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
- WebDriverWait'i ExpectedCondition ile birleştirerek herhangi bir koşul için kullanılabilir.
- En iyi yaklaşım, koşulu her saniye kontrol etmek ve koşul sağlandığı anda bir sonraki komuta geçmektir.
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, kendi zaman aşımı ve yoklama aralığına sahip bir Bekleme arayüzü uygulamasıdır. Her FluentWait örneği, bir koşulun gerçekleşmesi için beklenecek maksimum süreyi ve ne sıklıkla kontrol edileceğini belirler.
AJAX Çağrılarının İşlenmesinde Karşılaşılan Zorluklar Selenium Web Sürücüsü
- "Duraklat" komutunu kullanmak güvenilir değil. Uzun bir duraklatma, testi kabul edilemeyecek kadar yavaşlatır ve artırır. Test yapmak Zaman kaybı nedeniyle, AJAX uygulamaları için "waitforcondition" kullanılması önerildi.
- Belirli AJAX uygulamalarıyla ilişkili riski değerlendirmek zordur.
- Geliştiricilere AJAX uygulamasını tamamen değiştirme özgürlüğü vermek, test sürecini zorlaştırır.
- AJAX uygulamaları genellikle POST verilerini göndermek için farklı bir kodlama veya serileştirme tekniği kullandığından, otomatik test isteği oluşturmak test araçları için zor olabilir.
Not: “duraklat” ve “koşul bekle” Selenese komutlar kaldırıldı Selenium 3; WebDriver'daki karşılığı açık bir bekleme işlemidir.
Code AJAX İşleme Örneği Selenium Web Sürücüsü
MKS TestNG Aşağıdaki sınıf metni okur, radyo düğmesine tıklar, AJAX yanıtını bekler ve metnin değiştiğini doğrular.
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(); } }
Not: on Selenium 4 geçiş Süre.Saniye(5) WebDriverWait'e geçin ve System.setProperty satırını kaldırın, çünkü Selenium Yönetici chromedriver sorununu çözüyor.

