Az AJAX-hívások kezelése Selenium Webdriver
⚡ Okos összefoglaló
Az AJAX az oldal egy részének frissítését hívja újratöltés nélkül, tehát Selenium A WebDrivernek várnia kell az új tartalomra ahelyett, hogy feltételezné annak jelenlétét, és a várakozási stratégia dönti el, hogy a teszt megbízhatóan sikeresen átmegy-e.
Mi az AJAX?
Az AJAX az aszinkron rövidítése JavaSzkript és XML, és lehetővé teszi a weboldal számára, hogy kis mennyiségű adatot kérjen le a szerverről a teljes oldal újratöltése nélkül.
Az AJAX egy technika gyors, dinamikus weboldalak létrehozására. Aszinkron, egyesíti a JavaForgatókönyv adatformátummal, és az oldal részeit frissíti a teljes oldal helyett. Gmail, Google Térképek, Facebook és YouTube mindannyian használják.
Hogyan működik az AJAX?
Például, amikor rákattintunk a küldés gombra, JavaA szkript küld egy kérést a szervernek, értelmezi az eredményt, és újratöltés nélkül frissíti az aktuális képernyőt. Az alábbi ábra ezt a cserét mutatja.
- Az AJAX-hívás egy aszinkron kérés a böngészőtől, amely nem okoz oldalátmenetet. A felhasználó folytathatja a munkát az alkalmazáson, amíg a kérés válaszra vár.
- Az AJAX HTTP kéréseket küld a szervernek, és a válaszokat az oldal újratöltése nélkül dolgozza fel, így nem lehet megjósolni, hogy mennyi időbe telik a szervernek válaszolnia.
Egy tesztelő szempontjából a tartalom vagy egy elem ellenőrzése azt jelenti, hogy meg kell várni a válasz megérkezését. A hasznos adat eredetileg XML volt, ahogy a neve is mutatja; a legtöbb API ma már JSON-t ad vissza.
Az AJAX-hívások kezelése Selenium webdriver
Az AJAX-hívások kezelésének legnagyobb kihívása a betöltési idő ismerete. Mivel a frissítés a másodperc töredéke alatt tart, az alkalmazást nehéz automatizálási eszközzel tesztelni, így Selenium A WebDrivernek egy wait metódust kell alkalmaznia a hívásra.
A várakozási parancs végrehajtása felfüggeszti az aktuális Teszt eset amíg a várt vagy új érték meg nem jelenik; Selenium A WebDriver ezután folytatja a felfüggesztett lépéseket.
Az alábbiakban bemutatjuk azokat a várakozási módszereket, amelyek Selenium A WebDriver használhatja
Thread.sleep()
- A Thread.sleep() nem egy bölcs választás, mivel felfüggeszti az aktuális szálat a megadott időre.
- Az AJAX-ban sosem lehetünk biztosak a pontos várakozási időben, így a teszt sikertelen, ha az elem nem jelenik meg benne. Ez többletterhelést is jelent, mivel a Thread.sleep(t) áthelyezi az aktuális szálat a futó sorból a várakozó sorba.
- Az 't' idő elteltével a szál átkerül a kész várólistába, majd ismét várakozik, hogy a CPU felvegye.
Jegyzet: a Java a módszer Thread.sleep() kisbetűvel; a nagybetűs forma nem fordul elő.
Implicit várakozás ()
- Ez a metódus arra utasítja a WebDrivert, hogy várjon, ha egy elem nem érhető el azonnal, és a beállítás a teljes böngésző-munkamenet alatt érvényben marad. Minden elemkeresés tehát addig tarthat, ameddig az implicit várakozás megengedi.
Explicit várakozás ()
- Kifejezett várakozás A teszt végrehajtásának leállítására szolgál addig, amíg egy adott feltétel teljesül, vagy a maximális idő le nem telik.
WebDriverVárjon
- Bármely feltételhez használható a WebDriverWait és egy ExpectedCondition kombinálásával.
- A legjobb megközelítés az, hogy minden másodpercben ellenőrizzük a feltételt, és amint teljesül, ugorjunk a következő parancsra.
De a probléma ezzel a várakozással az, hogy meg kell említeni az időtúllépési egységet. Mi van akkor, ha az elem még mindig nincs jelen az időn belül? Tehát van még egy várakozás, amit Fluent várakozásnak hívnak.
Folyékony várakozás
- Ez a Wait interfész egy implementációja, saját időtúllépéssel és lekérdezési intervallummal. Minden FluentWait példány beállítja a feltételre való várakozás maximális idejét és az ellenőrzés gyakoriságát.
Az AJAX hívások kezelésének kihívásai Selenium webdriver
- A „szünet” parancs használata nem megbízható. A hosszú szünet elfogadhatatlanul lassúvá teszi a tesztet és növeli a Tesztelés idő, ezért az AJAX alkalmazásokhoz ehelyett a „waitforcondition”-t ajánlották.
- Nehéz felmérni az egyes AJAX alkalmazásokhoz kapcsolódó kockázatokat.
- A fejlesztők teljes szabadságának megadása az AJAX alkalmazások módosítására megnehezíti a tesztelési folyamatot
- Az automatizált tesztkérés létrehozása nehézkes lehet a tesztelőeszközök számára, mivel az AJAX alkalmazások gyakran eltérő kódolási vagy szerializációs technikát használnak a POST adatok elküldéséhez.
Jegyzet: A „szünet” és a „feltételre várakozás” funkciók szelén parancsok eltávolítva a következőből: Selenium 3; a WebDriver megfelelője egy explicit várakozás.
Code Példa AJAX kezelésre Selenium webdriver
Az TestNG Az alábbi osztály beolvassa a szöveget, rákattint a választógombra, megvárja az AJAX választ, és kijelenti, hogy a szöveg megváltozott.
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(); } }
Jegyzet: on Selenium 4 passz Időtartam.másodperc(5) a WebDriverWait parancshoz, és törölje a System.setProperty sort, mert Selenium A kezelő feloldja a chromedriver problémáját.

