Kuinka hoitaa AJAX-puhelu Selenium Webdriver -ohjelmassa

Sisällysluettelo:

Anonim

Mikä on Ajax?

AJAX tarkoittaa asynkronista JavaScriptiä ja XML: ää, ja sen avulla verkkosivu voi noutaa pieniä määriä tietoja palvelimelta lataamatta koko sivua uudelleen.

Ajax on tekniikka, jota käytetään luomaan nopeita ja dynaamisia verkkosivuja. Tämä tekniikka on asynkroninen ja käyttää Javascriptin ja XML: n yhdistelmää.

Se päivittää verkkosivun osan / osia lataamatta koko sivua uudelleen.

Jotkut kuuluisista AJAX-tekniikkaa käyttävistä sovelluksista ovat Gmail, Google Maps, Facebook, Youtube jne.

Tässä opetusohjelmassa opit-

  • Mikä on Ajax?
  • Kuinka Ajax toimii?
  • Ajax-puhelun käsitteleminen Selenium Webdriver -ohjelmalla
  • Ajax-puhelun käsittelyn haasteet Selenium Webdriverissa

Kuinka Ajax toimii?

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

  • Ajax-puhelu on selaimen käynnistämä asynkroninen pyyntö, joka ei johda suoraan sivusiirtymään. Se tarkoittaa, että jos käynnistät Ajax-pyynnön, käyttäjä voi silti työskennellä sovelluksen kanssa, 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, et ole varma siitä, kuinka kauan palvelin vie sinulle vastauksen .

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

Ajax-puhelun käsitteleminen Selenium Webdriver -ohjelmalla

Suurin haaste käsittelyyn Ajax puhelu tietäen latausaikaa www-sivulla. Koska verkkosivun lataaminen kestää vain murto-osan sekunneista, testaajan on vaikea testata tällaista sovellusta automaatiotyökalun avulla. Tätä varten Selenium Webdriverin on käytettävä odotusmenetelmää tässä Ajax-puhelussa.

Joten suorittamalla tämän odotuskomennon seleeni keskeyttää nykyisen testitapauksen suorittamisen ja odottaa odotettua tai uutta arvoa. Kun uusi arvo tai kenttä tulee näkyviin, keskeytetyt testitapaukset suorittaa Selenium Webdriver.

Seuraavassa on odotustavat, joita Selenium Webdriver voi käyttää

  1. Thread.Sleep ()
  • Thread.Sleep () ei ole viisas valinta, koska se keskeyttää nykyisen ketjun määrätyn ajan.
  • AJAXissa et voi koskaan olla varma tarkasta odotusaikasta. Joten testi epäonnistuu, jos elementti ei näy odotusajassa. Lisäksi se lisää yleiskustannuksia, koska Thread.sleep (t) -kutsuminen saa nykyisen langan siirtymään juoksevasta jonosta odotusjonoon.
  • Kun aika 't' on saavutettu, nykyinen ketju siirtyy odotusjonosta valmiiseen jonoon, ja sitten CPU: n valitseminen kestää ja kestää jonkin aikaa.
  1. Epäsuora odotus ()
  • Tämä menetelmä kehottaa webdriveria odottamaan, jos elementti ei ole käytettävissä heti, mutta tämä odotus on paikallaan koko ajan, kun selain on auki. Joten mikä tahansa sivun elementtien haku voi viedä aikaa, jonka implisiittinen odotus on asetettu.
  1. Selkeä odotus ()
  • Täsmällistä odottamista käytetään testin suorittamisen jäädyttämiseen siihen asti, kunnes tietty ehto täyttyy tai enimmäisaika raukeaa.
  1. Odota
  • 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 ongelma on, sinun on mainittava aikakatkaisuyksikkö. Entä jos elementtiä ei vieläkään ole läsnä ajassa? Joten on vielä yksi odotus, jota kutsutaan sujuvaksi odotukseksi.

  1. Sujuva odotus
  • Tämä on odotusrajapinnan toteutus, jonka aikakatkaisu ja kyselyväli ovat. Kukin FluentWait-ilmentymä määrittää enimmäisajan ehdon odottamiseen sekä taajuuden, jolla tila tarkistetaan.

Ajax-puhelun käsittelyn haasteet Selenium Webdriverissa

  • "Tauko" -komennon käyttäminen Ajax-puhelun käsittelyyn ei ole täysin luotettavaa. Pitkä taukoaika tekee testistä liian hitaasti ja lisää testiaikaa. Sen sijaan "waitforcondition" on enemmän hyötyä Ajax-sovellusten testauksessa.
  • On vaikea arvioida tiettyihin Ajax-sovelluksiin liittyviä riskejä
  • Kehittäjille annettu täysi vapaus muokata Ajax-sovellusta tekee testausprosessista haastavan
  • Automaattisen testipyynnön luominen voi olla vaikeaa testaustyökaluille, koska sellainen AJAX-sovellus käyttää usein erilaista koodausta tai sarjoitustekniikkaa POST-tietojen lähettämiseen.

Esimerkki Ajaxin käsittelemisestä

tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;tuo org.openqa.selenium.support.ui.ExpectedConditions;tuo org.openqa.selenium.support.ui.WebDriverWait;tuo org.testng.Assert;tuo org.testng.annotations.BeforeClass;tuo org.testng.annotations.Test;julkinen luokka Ajaxdemo {yksityinen merkkijono URL = "http://demo.guru99.com/test/ajax.html";WebDriver-ohjain;Odota odota;@Ennen tuntiapublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// luo kromi-ilmentymäohjain = uusi ChromeDriver ();ohjain.hallinta (). ikkuna (). maksimoi ();driver.navigate (). - (URL);}@Testatapublic void test_AjaxExample () {Kontin mukaan = By.cssSelector (". Kontti");wait = uusi WebDriverWait (ohjain, 5);odota kunnes (ExpectedConditions.presenceOfElementLocated (säilö));// Hanki teksti ennen ajax-puhelun soittamistaWebElement noTextElement = driver.findElement (By.clName ("radiopainike"));Merkkijono textBefore = noTextElement.getText (). Trim ();// Napsauta valintanappiadriver.findElement (By.id ("kyllä")). napsauta ();// Napsauta Tarkista-painikettadriver.findElement (By.id ("buttoncheck")). napsauta ();/ * Hae teksti ajax-puhelun jälkeen * /WebElement TextElement = driver.findElement (By.clName ("radiopainike"));odota kunnes (ExpectedConditions.visibilityOf (TextElement));Merkkijono textAfter = TextElement.getText (). Trim ();/ * Tarkista molemmat tekstit ennen ajax-puhelua ja ajax-puhelutekstin jälkeen. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Ajax-puhelu suoritettu");String odotettuText = "Valintanappi on valittu ja sen arvo on Kyllä";/ * Vahvista odotettu teksti ajax-puhelun jälkeen päivitetyllä tekstillä * /Assert.assertEquals (textAfter, odotettuText);kuljettaja.sulje ();}}

Yhteenveto:

  • AJAX antaa verkkosivun noutaa pieniä määriä tietoja palvelimelta lataamatta koko sivua uudelleen.
  • Ajax-sovelluksen testaamiseksi tulisi käyttää erilaisia ​​odotustapoja
    • ThreadSleep
    • Epäsuora odota
    • Selkeä odota
    • Odota
    • Sujuva odotus
  • Automaattisen testipyynnön luominen voi olla vaikeaa testaustyökaluille, koska sellainen AJAX-sovellus käyttää usein erilaista koodausta tai sarjoitustekniikkaa POST-tietojen lähettämiseen.