Kuinka käsitellä AJAX-puheluita Selenium Web-ohjain

Mikä on Ajax?

AJAX tarkoittaa asynkroninen JavaScript & XML, ja sen avulla Web-sivu voi hakea pieniä määriä tietoa palvelimelta lataamatta koko sivua uudelleen.

Ajax on tekniikka, jota käytetään nopeiden ja dynaamisten verkkosivujen luomiseen. Tämä tekniikka on asynkroninen ja käyttää yhdistelmää Javascript ja XML. Se päivittää verkkosivun osia lataamatta koko sivua uudelleen. Jotkut tunnetuista AJAX-tekniikkaa käyttävistä sovelluksista ovat Gmail, Google Maps, Facebook, Youtube jne.

Kuinka Ajax toimii?

Esimerkiksi kun napsautat Lähetä-painiketta, JavaKäsikirjoitus tekee pyynnön palvelimelle, tulkitsee tuloksen ja päivittää nykyisen näytön lataamatta verkkosivua uudelleen.

Kuinka Ajax toimii

  • Ajax-kutsu on selaimen käynnistämä asynkroninen pyyntö, joka ei johda suoraan sivun siirtymiseen. Se tarkoittaa, että jos käynnistät Ajax-pyynnön, käyttäjä voi silti työskennellä sovelluksen parissa, kun pyyntö odottaa vastausta.
  • AJAX lähettää HTTP-pyynnöt asiakkaalta palvelimelle ja käsittelee sitten palvelimen vastauksen lataamatta koko sivua uudelleen. Joten kun soitat AJAX-puhelun, sinä eivät ole melko varmoja siitä, kuinka kauan palvelimelta kuluu vastauksen lähettämiseen.

Testaajan näkökulmasta, jos tarkistat sisältöä tai näytettävää elementtiä, sinun on odotettava, kunnes saat vastauksen. AJAX-puhelun aikana tiedot tallennetaan XML-muodossa ja haetaan palvelimelta.

Kuinka käsitellä Ajax-puheluita Selenium Web-ohjain

- suurin haaste Ajax-puhelun käsittelyssä on verkkosivun latausajan tunteminen. Koska verkkosivun latautuminen kestää vain murto-osan sekunneista, testaajan on vaikea testata tällaista sovellusta automaatiotyökalun avulla. Sen vuoksi, Selenium Webdriverin on käytettävä odotusmenetelmää tässä Ajax-puhelussa.

Joten suorittamalla tämän odotuskomennon seleeni keskeyttää virran suorittamisen Testitapaus ja odota odotettua tai uutta arvoa. Kun uusi arvo tai kenttä tulee näkyviin, keskeytetyt testitapaukset suoritetaan Selenium Web-ajuri.

Seuraavassa on odotusmenetelmiä, jotka Selenium Webdriveriä voi käyttää

Thread.Sleep()

  • Thread.Sleep () ei ole viisas valinta, koska se keskeyttää nykyisen säikeen määritetyksi ajaksi.
  • AJAXissa et voi koskaan olla varma tarkasta odotusajasta. Joten testisi epäonnistuu, jos elementti ei näy odotusajan kuluessa. Lisäksi se lisää lisäkustannuksia, koska Thread.sleep(t):n kutsuminen siirtää nykyisen säikeen käynnissä olevasta jonosta odottavaan jonoon.
  • Kun aika 't' on saavutettu, nykyinen säie siirtyy odotusjonosta valmiiseen jonoon, ja sitten kestää jonkin aikaa, ennen kuin CPU poimii sen ja on käynnissä.

Implisiittinen odotus ()

  • Tämä menetelmä käskee webdriveriä odottamaan, jos elementti ei ole heti saatavilla, mutta tämä odotus on voimassa koko selaimen aukioloajan. Joten mikä tahansa sivun elementtien haku voi viedä implisiittisen odotusajan.

Nimenomainen odotus ()

  • Selkeä odotus käytetään pysäyttämään testin suorittaminen, kunnes tietty ehto täyttyy tai enimmäisaika kuluu.

WebdriverOdota

  • Sitä voidaan käyttää kaikissa olosuhteissa. Tämä voidaan saavuttaa WebDriverWaitilla yhdessä ExpectedConditionin kanssa
  • Paras tapa odottaa elementtiä dynaamisesti on tarkistaa ehto joka sekunti ja jatkaa komentosarjan seuraavaan komentoon heti, kun ehto täyttyy.

Mutta kaikkien näiden odotusten ongelmana on, että sinun on mainittava aikakatkaisuyksikkö. Entä jos elementtiä ei vieläkään ole ajan kuluessa? Joten on vielä yksi odotus nimeltä Fluent wait.

Sujuva odotus

  • Tämä on odotusrajapinnan toteutus, jolla on aikakatkaisu ja kyselyväli. Jokainen FluentWait-esiintymä määrittää enimmäisajan, joka kestää ehtoa, sekä taajuuden, jolla ehto tarkistetaan.

Haasteita Ajax-puhelun käsittelyssä Selenium Web-ohjain

  • "Pause"-komennon käyttäminen Ajax-puhelun käsittelemiseen ei ole täysin luotettavaa. Pitkä tauko tekee testistä kohtuuttoman hidasta ja lisää Testaus aika. Sen sijaan "waitforcondition" on hyödyllisempi Ajax-sovellusten testaamisessa.
  • Tiettyihin Ajax-sovelluksiin liittyviä riskejä on vaikea arvioida
  • Kun kehittäjille annetaan täysi vapaus muokata Ajax-sovellusta, testausprosessi on haastava
  • Automaattisen testipyynnön luominen voi olla vaikeaa testaustyökaluille, koska tällaiset AJAX-sovellukset käyttävät usein erilaista koodaus- tai sarjoustekniikkaa POST-tietojen lähettämiseen.

Koodiesimerkki Ajax HANDLING -käyttöön Selenium Web-ohjain

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

Yhteenveto

  • AJAXin avulla Web-sivu voi hakea pieniä määriä tietoa palvelimelta lataamatta koko sivua uudelleen.
  • Ajax-sovelluksen testaamiseen tulee käyttää erilaisia ​​odotusmenetelmiä
    • ThreadSleep
    • Epäsuora odota
    • Selkeä odota
    • WebdriverOdota
    • Sujuva odotus
  • Automaattisen testipyynnön luominen voi olla vaikeaa testaustyökaluille, koska tällaiset AJAX-sovellukset käyttävät usein erilaista koodaus- tai sarjoustekniikkaa POST-tietojen lähettämiseen.